0
0

Go gosimple S1016 警告について

Posted at

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さんいつもありがとう 😭)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0