🆙

Goa v3.17.1 更新情報

2024/07/07に公開

概要

Goa の更新情報メモです。

Goa v3.17.1

Goa v3.17.1 の更新情報です。

主な変更内容

  • Upgrade generated examples by @raphael in #3539

これまで Goa で用意していた debuglogger のパッケージを 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