sano11o1

Golang 構造体のフィールドには独自の型を定義したいね

公開日:


今まで関わってきたGoのプロジェクトでは構造体のフィールドに独自の型を定義していなかった。

type User struct {
   ID string
}

type Post struct {
   ID string
}


振り返るとこれはバグの温床になるので、面倒くさがらずに型をつけた方がよかったかなと考えている。
Goでは関数が複数の値を返却できる。複数の値の型が同じだった場合、その値がどのような値か?を関数を使う側に教える必要がある。

// どっちがuserID, postIDかわからない
func f() (string, string, error) {
}

// ので名前をつける
func f() (userID string, postID string, error) {
}


上記の実装にも問題がある。関数を実装した人がuserIDとpostIDの順番を間違える可能性がある。

func f() (userID string, postID string, error) {
    return postID, userID, err
}


最初から型をつけておけばシンプルになる。

type UserID string
type PostD string

type User struct {
   ID UserID
}

type Post struct {
   ID PostID
}

func f() (UserID, PostID, error){
}


型の恩恵を最大限受けて堅牢なコードを書きたいですね。