You are currently viewing Go Echoをv4→v5にアップデートしたときの主な変更点

Go Echoをv4→v5にアップデートしたときの主な変更点

自作ウェブアプリで利用しているEchoフレームワークをV4系からV5系にアップデートしました
主に修正が必要だった部分をメモしておきます

echo.contextが値渡しからポインタになった

自分のコードはOpenAPIを利用したスキーマ駆動開発の手法を取り入れていて、ハンドラーは以下のように定義しています

func (h AppHandler) Health(ctx echo.Context) error {
	return ctx.String(http.StatusOK, "OK")
}

echo v5ではコンテキストが値渡しからポインタに変換されたため、各ハンドラーを以下のように修正する必要がありました

func (h AppHandler) Health(ctx *echo.Context) error {
	return ctx.String(http.StatusOK, "OK")
}

各ハンドラーを修正する必要があったため数は多かったものの、自分のケースではそこまで大掛かりなコードの変更は発生しませんでした

ログシステムの変更

ログシステムがEcho独自のログシステムから、Go標準のslogへ変更されました
そのため、ログ出力部分をすべて変更する必要がありました

Echo v4では以下のようにログを出力しています

		if err != nil {
			e.Logger.Errorf("コンテンツデータ個別登録に失敗しました: %v, Response: %v", err, insertResp.Result)
			return err
		}

Echo v5では以下のようになりました

		if err != nil {
			e.Logger.Error("コンテンツデータ個別登録に失敗しました", "error", err, "response", insertResp.Result)
			return err
		}

slogは構造化ログという仕組み(考え方?)を取り入れており、文字列してログを出力する、という従来の方式ではなくキーバリュー形式でログを出力するのに近いイメージなっているみたい

ログを単なる「デバッグや確認用」として出力するのではなく、「ElasticSearchなどの基盤で分析するためのデータ」として利用できるようにするための仕組み
なので、今後はログデータも分析前提のデータとして意識する必要がありそう
(でも今回はバージョンアップだけにしたため、すべてのログは構造化しおらずfmt.sprintf()で妥協して出力している場所もある)

oapi-codegen用のカスタムテンプレート準備

今回一番大変だった(けど、AIに全部やってもらった)のが、oapi-codegenがEcho v5に対応しておらず、出力されたコードがそのまま利用できなかったということ

対策としてはカスタムテンプレートを準備し、Echo v5に合わせた内容でコードを出力できるように修正してもらった

ちなみにこのブログを記載している時点で2.7.0がリリースされており、Echo v5に対応しているとのこと
https://github.com/oapi-codegen/oapi-codegen/releases/tag/v2.7.0

自分のアプリもver 2.7.0を利用するように変更する必要がある
タスクリストに追加しておこう

コメントを残す