🆙
Goa v3.17.1 更新情報
概要
Goa の更新情報メモです。
Goa v3.17.1
Goa v3.17.1 の更新情報です。
主な変更内容
- Upgrade generated examples by @raphael in #3539
これまで Goa で用意していた debug
と logger
のパッケージを clue のそれと置き換える、という修正が入っています。ミドルウエアは clue のものを積極的に使っていく、ということでしょうか。
- SkipResponseWriter by @duckbrain in #3537
SkipRequestBodyEncodeDecode
を利用しようとすると、 io.ReadCloser を用意してそれをレスポンスする必要がありますが、この PR の作者が遭遇したケースでは io.Writer から io.ReadCloser を作成する必要が多かったので、 io.Writer を io.ReadCloser に変換するためのアダプタを用意した。ということのようです。
// SkipResponseWriter converts an io.WriterTo into a io.ReadCloser.
// The Read/Close methods this function returns will pipe the Write calls that wt makes, to implement a Reader that has the written bytes.
// If Read is called Close must also be called to avoid leaking memory.
// The returned value implements io.WriterTo as well, so the generated handler will call that instead of the Read method.
//
// Server handlers that use SkipResponseBodyEncodeDecode() io.ReadCloser as a return type.
func SkipResponseWriter(wt io.WriterTo) io.ReadCloser {
return &writerToReaderAdapter{WriterTo: wt}
}
io.WriterTo
を実装していれば io.ReadCloser
に変換できます。なかみは、pipe で呼び出して利用する、みたいなコードが書かれています。
SkipResponseWriter
を利用するときに覚えておくとよさそうです(いまいち使いどころがピンとこなかった)。
その他の細かな調整
- Support nested DSLs by eval.caller() by @tchssk in #3523
- Properly handle SkipRequestBodyEncodeDecode when generating CLI by @raphael in #3532
- Use eval.TooManyArgError() more by @tchssk in #3526
- Add test for eval.InvalidArgError() by @tchssk in #3536
- Move gRPC codegen templates to separate files by @raphael in #3538
- Use errors.Is() by @tchssk in #3541
- Use errors.As() by @tchssk in #3542
- Use fmt.Errorf("%w") for error wrapping by @tchssk in #3544
- Fix misc issues with server example generation by @raphael in #3545
細かな調整が多いですが、コツコツ整備されてる感じがします。ちな、v3.17.0 は欠番ぽいです(tagは打たれてるけど)。
Happy hacking!
Discussion