地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

構造体を初期化する際はメンバも指定する

goでの構造体の初期化と同時に値を代入する方法は2つあってメンバを順番に入れる方法とメンバを明示的に指定する方法がある。

type T struct {
    Name string
    Age int
}

こんな構造体があるときに初期化は

// 1
t := T{"tanaka", 50}

// 2
t := T{Name: "tanaka", Age: 50}

上記のうち1は構造体に変更が加わった際にメンバが追加や順番の変更に対応できなくて困る。

type T struct {
    Name string
    Age int
    Hex int16
}

こんな感じにメンバが追加になっても2の書き方をしておけば1はコンパイルエラーが出るがでない。

初期化忘れでもコンパイルエラーとならなくて済む。(未指定のフィールド値は0で初期化)

ただしこれが原因でのエラーとなるケースは救えなくなるのが欠点。

newで初期化してポインタ型変数として使う方法をとっておけば初期値はふられるのでそっちの方が良いのだろうか。

xn--go-hh0g6u.com