macOS Sierra 10.12 で golang/go のテストを実行するメモ
このあたりに従い、ソースコードをもってくる。
$ git clone https://go.googlesource.com/go $ cd go
このあたりに従い、テストを実行する。
$ cd src $ ./all.bash
失敗した。
$ ./all.bash ##### Building Go bootstrap tool. cmd/dist ERROR: Cannot find /Users/utahta/go1.4/bin/go. Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
GOROOT_BOOTSTRAP に go 1.4 以上のパスをセットして、実行してみる。
$ GOROOT_BOOTSTRAP=/usr/local/Cellar/go/1.8.3/libexec ./all.bash
成功した。
$ GOROOT_BOOTSTRAP=/usr/local/Cellar/go/1.8.3/libexec ./all.bash ##### Building Go bootstrap tool. cmd/dist ##### Building Go toolchain using /usr/local/Cellar/go/1.8.3/libexec. bootstrap/cmd/internal/dwarf ... 略 ... ##### API check ALL TESTS PASSED ... 略 ...
basic_scaling の idle_timeout について #GAE
試したメモ。
app.yaml のドキュメントをみると、以下のように書いてある。
idle_timeout Optional. The instance will be shut down this amount of time after receiving its last request. The default is 5 minutes. 任意。 インスタンスは、最後の要求を受信した後、この時間をシャットダウンします。 デフォルトは5分です。(Google 翻訳)
受信とは…🤔
- 最後のリクエストを受け付けてからN分後にシャットダウンするのか
- 最後のリクエストを完了してからN分後にシャットダウンするのか
おそらく b だと思うけど、分からないので簡単に試した。
結論
b の最後のリクエストを完了してからN分後にシャットダウンする
が正しい。
検証ログ
以下のように basic_scaling
の設定をした app.yaml
を用意して、
# app.yaml ... 略 ... instance_class: B1 basic_scaling: idle_timeout: 1m # 5分だと長いので1分に設定 max_instances: 1 handlers: - url: /_ah/start # basic_scaling 用 script: _go_app login: admin - url: /path/to script: _go_app login: admin ... 略 ...
/path/to
にアクセスする。
func PathTo(w http.ResponseWriter, req *http.Request) { ctx := appengine.NewContext(req) for i := 0; i < 20; i++ { log.Infof(ctx, "sleep... i:%v", i) time.Sleep(10 * time.Second) } }
a であれば、最中にシャットダウンされるので、ログが途切れるハズ。
結果
途切れてない:)
LINE Notify を Go でさくさく使うためのライブラリをつくった #golang
github.com LINE Notify については こちら
使い方
実例コードを用意してます。
認証 と 通知 の2つ、サンプルがあります。
注意事項として、認証のサンプルはコールバック用の外部からアクセスできる URL が必要です。
通知のサンプルは、アクセストークンがあれば動きます。
アクセストークンは LINE Notify 管理画面でお試し発行できるので、それを使ってみてください。
認証について
通知用のアクセストークンを取得します。
具体的な流れは、
/auth
にアクセスした人を、LINE Notify 認証 URI にリダイレクト- リダイレクト先で通知設定をしたとき、
/callback
に POST リクエスト - 渡ってきたパラメータ(code)を使って、アクセストークンを取得
です。
/auth でやっていること
認証に必要なパラメータをセットして、認証 URI にリダイレクトしてます。
このとき CSRF 攻撃対策のために、state をもつようにしてます。
/callback でやってること
渡ってきたパラメータをパースします。
次に、state の値を比較して、正常なリクエストかどうかを確認します。
最後に、code をつかってアクセストークンを取得します。
通知について
アクセストークンをつかって通知します。
LINE Notify は、テキストだけではなく、画像を送ることもできます。
画像は、URL かバイナリで指定します。
もし仮に両方指定したときは、バイナリを優先します。
ちなみに GoogleAppEngine で使いたいときは、Client.HTTPClient
に urlfetch.Client
を入れるようにしてください。
c := linenotify.New() c.HTTPClient = urlfetch.Client()