gRPC with Go
Unit test
TestMain
Log
Server stream を受け取る
このようなコードは書けない。なぜなら、err == io.EOF が帰ってきたタイミングで、resp は nil になってしまう。for ループの外で処理が必要な場合は channel を使うのが一つの方法
code:stream.go
var resp Type
for {
resp, err = stream.Recv()
}
各 handler はリクエストごとに別の goroutine で実行される
Error
status code とメッセージを返すシンプルなものと、より詳細なデータ構造を返す Richer Error Model(REM) がある
REM でよく使われる struct は google が用意しているものがある
Error を正しく実装すれば、Error から status のオブジェクトをつくることもできる
streaming で error を返すと接続が切れてしまう、という記述があるが、そうなのだろうか? http のコネクションは rpc 呼ばれるたびに作られるわけではなかった気がするが。。。
エラーハンドリング例
deadline
cancel stream rpc
use context
I/F validation
proto にルールを記述し、コードを自動生成するツールがいくつかある