- 1. Botが雑談に応えられるようにするWEB APIを公開してみた話【個人開発】
- 2. GoのEchoを自動リフレッシュしてくれるスクリプト
- 3. goxygenをつかって、Go + Front Framework + MongoDB構成のWebアプリテンプレートをかんたんに作成する
- 4. [Golang] ターミナルの入力とPipe処理の入力を区別する
- 5. GoでClean ArchitectureでのAPIを実装したときにハマったInterfaceの呼び出し方
- 6. Adafruit Trinket M0でTinyGo(シリアル通信編)
- 7. Go で Slack Bot を作る
- 8. [Golang] windows用にtouchコマンドを作ってみた
- 9. PermutationとBST
- 10. Go バイナリファイルの読み書き
- 11. Golang mockery/testifyで高階関数をmockする
- 12. Go Windows GUI Walk examples
- 13. [Go]1行加えるだけで interface の実装を強制するテクニック
- 14. Goaの設定中に「”protoc”: executable file not found in $PATH:」と出たときの対処法
- 15. Go text/template で文字列作成
- 16. go:mapstructureを使ってJSONファイルを開いて構造体を返す汎用的な関数
- 17. 意外と知らない並列処理のメリット
- 18. 【初心者に最適】なぜ我々はRPAに頼るのか。いまだに誰も教えてくれないエンジニアが使うべき自動化ベストプラクティス(2020年03月時点)
- 19. [ネタ]Excel方眼紙の上に好きな画像を正方形にペイントするツールをGoで作ってみた
- 20. Neovimでpopup-menuを実装できるプラグイン
Botが雑談に応えられるようにするWEB APIを公開してみた話【個人開発】
# 対象読者
– チャットボット等を初めとする「対話型」のサービスに興味がある方
– チャットボット等の開発に興味がある方
– チャットボットに雑談を話させたい型# 概要
チャットボットを初めとする「対話型」のサービスが様々な場面で活用されている昨今ですが、対話型サービスの開発で非常に厄介なのが、「**ユーザからの問いかけに応答するためのセリフを用意しきれない**」問題です。ある程度シチュエーションや用途が限られる場合や、サービス提供者が会話の選択肢を与えるなどしない限り、対話型サービスは無数のユーザ発話を想定して開発をしなければなりません。とりわけ、ユーザがチャットボットに対して行う「雑談」はこの際たる例です。無数にある雑談のバリエーションに対応するには非常に大きいコストがかかりますが、対応をしないと下記の例のように「**すみません、違った言い方で話しかけてみてください**」のような応答を繰り返す味気ない対話型サービスになってしまいます。
“`
Chatbot: 「他に何かできることはありますか?」
User: 「今日は疲れたなー」
Chatbot: 「すみません、よくわか
GoのEchoを自動リフレッシュしてくれるスクリプト
# はじめに
GoのEchoを少し触っていて、Flaskのように変更適用時に自動でリフレッシュしてくれる機能があれば便利だなと思いました。特に、ソースコードに影響を及ぼさずに外部から環境を構築することが、ミスを減らすために重要だと感じ、シェルスクリプトを書きました。コイツは、カレント以下の変更を検知するようにしてあるので、`./module/`等の変更にも対応してくれます。まあまあ便利なものができたなと思っているので、よかったら使ってみてください。
# 実行環境
`fswatch`を使います。“`bash:
# Mac
$ brew install fswatch
# Ubuntu
$ sudo apt install fswatch
“`# シェルスクリプト
`Makefile`で`make run`を設定していれば、当スクリプトを同一ディレクトリに配置してそのまま実行すると良いです。“`bash:autoreloader.sh
#!/bin/bashfunction cleanup()
{
app_pid=`/bin/ps -fu $USER| gr
goxygenをつかって、Go + Front Framework + MongoDB構成のWebアプリテンプレートをかんたんに作成する
## 前置き
githubの[Trending Go repositories](https://github.com/trending/go)を見ていたところ、**goxygen**という面白そうなテンプレート作成ツールがあったので、使ってみました。リポジトリは下記です。
https://github.com/Shpota/goxygenリポジトリのトップページに、
*Generate a modern Web project with Go, Angular/React/Vue, and MongoDB in seconds?*
とあるように、コマンド一発叩くだけで、MariaDB + golang + FrontFW(Angular or React or Vue)構成のWebアプリの骨子が出来上がるみたいです。
## インストール
READMEに記載の通り、`go get -u github.com/shpota/goxygen`にて取得します。## goxygen起動
`go run github.com/shpota/goxygen init [appna
[Golang] ターミナルの入力とPipe処理の入力を区別する
# 概要
CLIを作る時に、ターミナルからのインプットとPipe処理からのインプットの区別が必要になったのでまとめる
目次
1. ソースコード
2. 実行結果
3. 原理と実装詳細
4. 参考文献## ソースコード
“` main.go
package mainimport (
“fmt”
“io/ioutil”
“os”“golang.org/x/crypto/ssh/terminal”
)const (
STDIN = “stdin”
PIPE = “pipe”
)func main() {
isStdin := terminal.IsTerminal(int(os.Stdin.Fd()))
switch isStdin {
case true:
var stdin string
fmt.Scan(&stdin)
fmt.Printf(“type: %s, text: %s\n”, STDIN, stdin)
break
case false:
input, _ := ioutil.ReadAll(os.Stdi
GoでClean ArchitectureでのAPIを実装したときにハマったInterfaceの呼び出し方
# はじめに
今回はGoとClean Architecutureの復習を兼ねて、ゼロからAPIを実装したときに詰まった部分を備忘のためにここに記載します。Clean Architectureならびに利用したフレームワークのbeego自体については、あまりふれないので参考文献をご覧ください。# 詰まった部分
Interface層であるControllerで、構造体を作成する際にどうやってInterface(継承)をわたせばいいのかわかりませんでした。
具体的には、関数`NewStatusController`に渡す引数`appConfigInterface`の構造体と具体的な値です。
渡すべき引数は、作成したInterface(継承)だと思っていたのですが、Interface(継承)を渡すということに、直感的に「?」が生まれました。“`Go:status.go
package controllersimport (
“yamamon/flathand-bookmark/interfaces/inside”
“yamamon/flathand-bookmark/useca
Adafruit Trinket M0でTinyGo(シリアル通信編)
#はじめに
[前回](https://qiita.com/quadnine/items/cfe161e126d4391a8753)に続き、今回はTinyGoとMacとの間でシリアル通信してみる
#セットアップ
###MacでTTYデバイスを確認
“`
$ ls /dev/tty.usb* [/Users/takaaki]
crw-rw-rw- 1 root wheel 18, 40 3 8 15:55 /dev/tty.usbmodem14101
“`
Adafruitが繋がっているTTYデバイス名を確認しておく
#実行コード
“`go:main.go
package mainimport (
“time”
)func main() {
i := 0
for {
time.Sleep(time.Millisecond * 1000)
Go で Slack Bot を作る
シンプルな Slack Bot を Go 言語で作ってみます。
順を追って作り方を解説していくので「サンプルコードだけ見たいよ」という方は [こちら](#終わりに) に記載されているものをご参照ください。## 作るもの
下図のように Bot に対しメンションをつけて `ping` と送ると `pong` と返してくれるだけのシンプルなものです。
![slackbot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586035/dca85675-4c76-0be8-6cec-44d3b853b62b.png)
Slack からのイベント受信には [Events API](https://api.slack.com/events-api) を使用します。同様に Slack からのイベントを受信する方法としては WebSocket でやり取りする [RTM API](https://api.slack.com/rtm) があり、こちらであれば App 側から Slack に接続しにいくのでサーバー
[Golang] windows用にtouchコマンドを作ってみた
# 概要
windowsでtouchが使えないので、以下の機能を持つtouchコマンド作ってみた。
1. 複数ファイルを一度に作る (例) touch file1 file2 file3
2. 既存ファイルは上書きしないもっと綺麗に書ける案があれば教えてください。
[githubレポジトリ](https://github.com/youk-h/golang-cli/tree/master/touch)## mainコード
mainコード
“`main.go
package main
import (
“errors”
“flag”
“os”
“sync”
)func main() {
flag.Parse()
execute(flag.Args())
}func execute(fileNames []string) {
wg := sync.WaitGroup{}
for _, name := range fileNames {
wg.Add(1)
goPermutationとBST
# Go Data Structures: Binary Search Tree
https://flaviocopes.com/golang-data-structure-binary-search-tree/# Generate all permutations
https://yourbasic.org/golang/generate-permutation-slice-string/Go バイナリファイルの読み書き
# Go バイナリファイルの読み書き
今回は、Goで固定長と可変長なデータがあるバイナリファイルを読み書きしてみたいと思います。
## やりたいこと
複数個ファイルを1つのバイナリファイルにする。(結合)
バイナリファイルを複数ファイルに書き戻す。(分割)
## データ構造
下記のデータ構造を1つのファイルとして扱い、連結していく。
Offset: 00 01 02 03 04 05 06 07 00 ファイル名サイズ
(4 byte 固定: BigEndian)ファイルサイズ
(4 byte 固定: BigEndian)08 ファイル名
(可変長: LitGolang mockery/testifyで高階関数をmockする
golangでテストを書く際、[vektra/mockery](https://github.com/vektra/mockery)による[stretchr/testify](https://github.com/stretchr/testify)で使用できるmockの自動生成が非常に便利なのですが、双方クイックリファレンス以外の細かいドキュメントがあまり存在せず特殊な関数をmockしようとする結構悩みます。
最近調べまくったもので**「無名関数で書かれた高階関数のmock」**はズバリの解決方法が検索してもtestifyのissueくらいしか出てこなかったので同じく悩める人のためにここに残しておきます。
# ポイント かつ 結論
* 引数を元にmock内の処理を独自に書きたいなら[Call.Run] (https://godoc.org/github.com/stretchr/testify/mock#Call.Run)を活用する
* mockの戻り値を動的に変更したいなら[Call.Return](https://godoc.org/github.com/stretchr/teGo Windows GUI Walk examples
# Go Windows GUI Walk examples
GoでWindowsのGUIを作るときは、
`lxn/walk` というpackageを使っています。## lxn/walk
GitHub – lxn/walk: A Windows GUI toolkit for the Go Programming Language
https://github.com/lxn/walk上記のリポジトリ内に `examples` というフォルダがあり、
いろいろなコード例が入っています。https://github.com/lxn/walk/tree/master/examples
“`text
./examples
├─actions
├─clipboard
├─databinding
├─drawing
├─dropfiles
├─externalwidgets
├─filebrowser
├─gradientcomposite
├─imageicon
├─imageview
├─imageviewer
├─img[Go]1行加えるだけで interface の実装を強制するテクニック
## 本記事の目的
Go の interface を使って抽象的にオブジェクトを扱いたいときにメソッドの実装漏れってないでしょうか?
抽象化したい構造体が多くかったり、interface のメソッドの定義を変更した場合に簡単に発生しちゃうことだと思います。今回はその問題を起こさないために、Goコンパイラに interface の実装漏れを伝えてもらえるようになる簡単なテクニックを共有します。
## 説明
具体例に `Do()` というメソッドを実装するだけで `Doer` になれる interface を定義してみました。
`Person` は `Doer` の `Do()` メソッドを実装しているので `Doer` です。https://play.golang.org/p/W9Gd3gZKY2z
“`go
type Doer interface {
Do()
}type Person struct {
Name string
}func (p Person) Do() {
fmt.Printf(“My name is %s. I am Doer!!!!Goaの設定中に「”protoc”: executable file not found in $PATH:」と出たときの対処法
# 筆者の環境
– macOS Catalina 10.15.3
– Go言語 1.14
– Goa v3.0.10# Go言語でGoaを使うところに躓いたところ。
ネットの日本語記事はバージョンが古かったりカオスだったので、公式ドキュメントを見ながら進めていきました。Getting Started · Goa :: Design first.
https://goa.design/learn/getting-started/ドキュメントを見ながら進めて以下のコマンドを実行したところ、エラーを出しました。
“`zsh:zsh
goa gen calc/design
failed to run protoc: exec: “protoc”: executable file not found in $PATH:
“`落ち着いてドキュメントの上の方を見るとこんなことが書いてありました。
https://goa.design/learn/getting-started/#prerequisites
> The service makes use of gRPC aGo text/template で文字列作成
# Go text/template で文字列作成
みなさん、こんにちは!
Go書いてますか?今回は、`text/template` を使って ひな形 から 文字列 を生成する方法をご紹介します。
## text/template
公式が作成している 標準package なので すぐに使えます。
* template – The Go Programming Language
* https://golang.org/pkg/text/template/似たようなpackageで `html/template` というのがありますが、
これはコードインジェクションに対して安全なHTML出力を生成するものなので
そういった目的がないときは、 `text/template` を使用しましょう。* template – The Go Programming Language
* https://golang.org/pkg/html/template/ちなみにどちらも使い方は、同じです。
## 使ってみる
文字列のひな形 と データ を入れ込むことによって、目
go:mapstructureを使ってJSONファイルを開いて構造体を返す汎用的な関数
# やりたいこと
* いろんなファイルを読み込む必要がある
* いちいちそのファイル専用の関数を作りたくない
* JSONファイルパスと構造体を渡すだけで済む汎用的な関数を作りたい# コード
“`json:config.json
{
“ip_addresses”: [“127.0.0.1”, “127.0.0.2”, “127.0.0.3”]
}
“`“`go:main.go
package mainimport (
“fmt”
“github.com/mitchellh/mapstructure”
“encoding/json”
“io/ioutil”
)type Conf struct {
// ここ重要。アンダースコア必要
Ip_Addresses []string `json:”ip_addresses”`
}func main() {
const confPath = “./config.json”
var conf Conf
convertJsonFileToStruct(confPath, &con意外と知らない並列処理のメリット
Quoraの[並列処理のメリットは何ですか?](https://qr.ae/pNtlKE)を参考にしてます。
処理の前後関係がないアルゴリズムを同時に実行できる。
単純にN個の並列化で処理時間がN分の1になるわけではないことに注意
日本のスーパーコンピュータ『京』も並列コンピュータです。
【初心者に最適】なぜ我々はRPAに頼るのか。いまだに誰も教えてくれないエンジニアが使うべき自動化ベストプラクティス(2020年03月時点)
[なんでこんなクド過ぎるタイトルなのかは前回をご参照ください。](https://qiita.com/ykato/items/03306aaa55d091d61d9b)
記事としては**業務経験に漬け込んだ自動化のツール作ったので見てマサカリでも良いから感想欲しいです!という内容**です。*興味無ければそっ閉じお願いします。*
とりあえず、こんなの作ったので見て!
[opsapi](https://github.com/yasutakatou/opsapi)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/2f1d60da-be12-552d-043b-fef169730151.gif)
リポジトリに書いてありますが、オジサンが中学生英語で書いたものをさらにオジサン意訳しますね!
## 前説
定期的な申請とかeラーニングみたいなただ手を動かすメンドクサイ仕事ありますよね?
あなたは人力でどうにかしなきゃならないし、また同僚もおんなじタスクをしなきゃならない[ネタ]Excel方眼紙の上に好きな画像を正方形にペイントするツールをGoで作ってみた
# 概要
日本の文化圏にいれば、どこかで「[Excel方眼紙](https://ja.wikipedia.org/wiki/Excel%E6%96%B9%E7%9C%BC%E7%B4%99)」に出会うことがあるでしょう。
このエントリでは、Excel方眼紙にお気に入りの絵をペイントして眺めてみるツールを作ってみました。|![lenna_rendered.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/6a54c551-808c-06c2-f30f-574b75813b68.png)|
|:—|
|図:[コンピュータで画像系のサンプルでよく使われるLenna様](https://en.wikipedia.org/wiki/Lenna)をペイント|# TL;DR;
リポジトリはこちら[https://github.com/hrkt/xlspaint](https://github.com/hrkt/xlspaint)です。
ご自身でビルドするか、[リリースのページから実行形式xlsNeovimでpopup-menuを実装できるプラグイン
## Neovim用のpopup-menuを実装できるプラグインを作りました
[Vim8にはpopup_menu()という関数があり](https://vim-jp.org/vimdoc-ja/popup.html#popup_menu())、ユーザー独自のpopup-menuを利用した機能を作ることができるのですが、これまで残念ながらNeovimには同じ機能は実装されていませんでした。これは時々問題になることがあります。例えば、プラグイン作者が軽い気持ちで`popup_menu()`を利用すると、Neovimでは`popup_menu()`に相当する機能がないため、Neovimで全く同じ機能を実装するのは一苦労することになります。
今回これを解決すべく、**popup-menu.nvim**というプラグインを作成しました。
https://github.com/kamykn/popup-menu.nvim
## 利用イメージ
見た目はこんな感じです。
関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた