🆙
Goa 更新情報 v3.7.12
概要
Goa の更新情報メモです。
Goa v3.7.12
更新内容
- Go 1.18 にアップグレード #3088
- required のバリデーションの生成をリファクタリング #3089
-
struct:pkg:path
タグに関するバグ修正 issue #3083 #3084 #3093 #3094 #3095 -
MapOf(String, Any)
なオブジェクト(free-form object)の OpenAPI Doc での形式が OpenAPI 3.0の仕様と合ってないバグの修正 issue #3055 #3092 - Example を複数書いたときの OpanAPI Doc での表示の修正 issue #3090 #3096
- エラー生成用のメソッドで goa.ServiceError を生成するときに元のエラーをラップするように修正 #3063
- Goa で利用している
httptreemux
のミドルウエアの機能を利用できるようにする #3097
詳細
細かな修正だけですが、気になったのをピックアップします。
goa.ServiceError を生成するときに元のエラーをラップするように修正
これは、Goa が生成する MakeNotFound(error)
みたいなエラー生成用の関数が、引数で渡されたエラーをラップするようになったという修正です。これで何がうれしいのかというと、errors.Is()/As()
が使えるようになります。ミドルウエアとかで、サービスメソッドから上がってきたエラーを、ログするのに種別によって振り分けたりするには、エラーの文言を見るしかなかったのですが、この修正で errors.Is()/As()
で操作することが出来るようになりました。
生成される Goa のエラー生成関数の違い
修正前:
/ MakeNotFound builds a goa.ServiceError from an error.
func MakeNotFound(err error) *goa.ServiceError {
return &goa.ServiceError{
Name: "not_found",
ID: goa.NewErrorID(),
Message: err.Error(), // ← エラーのメッセージだけを直接指定して goa.ServiceError を返していた
}
}
修正後:
func MakeNotFound(err error) *goa.ServiceError {
return goa.NewServiceError(err, "not_found", false, false, false) // ← エラーを埋め込む関数を呼ぶように変更
}
( '-').oO( もともと、err.Error()
でエラーの文字列しか設定してないじゃん・・・て思ってたんですよね。折角 error
を引数にしているので、それがラップされるようになって自然な形になったんじゃないかな、と思います。
Example を複数書いたときの OpanAPI Doc での表示の修正
これは、OneOf で生成される Union Type
を利用したときに、それぞれの型で Example を書いているのに、最後の Example しか採用されないというバグの修正です。普通のところに Example をいくつも書いていい、みたいな話ではない模様。
httptreemux
のミドルウエアの機能を利用できるようにする
Goa で利用している これは clue の新しい機能を利用できるようにするためのもの。こちらも参照ください:clue 更新情報 v0.9.0
Happy hacking!
Discussion