🤔

Echo でデフォルト値を設定しつつ,クエリパラメータを Bind する

2023/08/14に公開

前提

・GET APIを実装しています
・APIのクエリパラメータに limit, offset が存在します

お気持ち

・limit, offset が入力されない場合はデフォルト値を設定したい
・limit, offset が入力された場合はその値を優先してほしい
・記述量は多くない方がイイな・・🥹
・使い回せれば嬉しい・・🙏

コード

const (
	defaultOffset int = 0
	defaultLimit  int = 15
)

type Pagination struct {
	Offset int `query:"offset"`
	Limit  int `query:"limit"`
}

func NewPagination() Pagination {
	return Pagination{
		Offset: defaultOffset,
		Limit:  defaultLimit,
	}
}
type GetFooRequest struct {
	FooID string `param:"foo-id"`
	Pagination
}

func NewGetFooRequest(ctx echo.Context) (*GetFooRequest, error) {
	request := GetFooRequest{
		Pagination: NewPagination(),
	}

	if err := ctx.Bind(&request); err != nil {
		return nil, err
	}
...
...

埋め込んだ構造体に対して,echo の Bind がちゃんとできるのか?と思ったけどできた.
ちゃんと request.Limit, request.Offset でアクセスできます
HAPPY

もっと良い感じに書けるぜ!!っていうのがあれば,
教えてくださると幸いです☺️

Discussion