公開日:
今まで関わってきた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){
}
型の恩恵を最大限受けて堅牢なコードを書きたいですね。