go-golangci-lint(gosimple)で、以下のような警告が表示されました。
S1016: should convert v
(type github.com/nanato-okajima/repository/internal/model.User)
to github.com/nanato-okajima/repository/internal/model.UserResponse
instead of using struct literal (gosimple)go-golangci-lint
構成
以下のような実装をしています。
DBから取得したデータをクライアントへ返却する際に
構造体同士の移し替えを行っています。
この際にgo(gosimple)で警告が表示されていました。
// データベースから取得したデータを入れるDTO
type User struct {
ID uint64
Name string
Age uint64
}
// クライアントへ返却するデータ
type UserResponse struct {
ID uint64
Name string
Age uint64
}
results := make([]model.UserResponse, len(users))
for i, v := range users {
results[i] = model.UserResponse{ // ここでlintの警告
ID: v.ID,
Name: v.Name,
Age: v.Age,
}
}
return results, nil
原因
フィールドが同じ構造体同士でしたので、
一つずつフィールドにバインドするよりも
キャストするとコードがシンプルになるよ。
と教えてくれていたみたいです。
results := make([]model.UserResponse, len(users))
for i, v := range users {
+ results[i] = model.UsersResponse(v)
- results[i] = model.UsersResponse{
- ID: v.ID,
- Name: v.Name,
- Age: v.Age,
- }
}
return results, nil
終わりに
改めて読んでみると警告メッセージの通りですが、
初め見た際に?となってしまったので、備忘録として残しておきます。
(linterさんいつもありがとう 😭)