🆙

Goa 更新情報 v3.7.12

2022/07/17に公開

概要

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 をいくつも書いていい、みたいな話ではない模様。

Goa で利用している httptreemux のミドルウエアの機能を利用できるようにする

これは clue の新しい機能を利用できるようにするためのもの。こちらも参照ください:clue 更新情報 v0.9.0

Happy hacking!

Discussion