April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Goの構造体をインスタンス化するには3種類の方法があります。
new()関数で作成
var変数宣言
複合リテラル(composite literal)で作成
// newで作成(あまり使わない)
p1 := new(Person)
// var変数宣言で作成
var p2 Person
// 複合リテラルで初期化
p3 := &Person{
FirstName: "三成",
LastName: "石田",
}
生成される型がポインター型かどうか、初期値を与えられるかどうかの違いはありますが、どれを使っても間違いではありません。標準ライブラリでも、これらが利用されています。
生成方法 |
生成される型 |
フィールドの初期値 |
|---|---|---|
|
|
ゼロ値のみ |
|
|
ゼロ値のみ |
複合リテラル |
|
初期値を設定できる |
複合リテラルは、ネストした構造体でも利用できます。
複合リテラルによるインスタンス作成時に値を設定しなかったフィールドや、他の手法で初期化した時の各フィールドはゼロ値と呼ばれるもので初期化されます。ゼロ値は、数値であればゼロ、文字列であれば空文字列、ブール型であればfalse、ポインターであればnilです。
varを使った宣言には、ポインター型の宣言もあります。これはインスタンスのポインターを格納する変数であって、この変数宣言そのものではインスタンスは作成されません。初期値を与えない場合、nilが保存されます。
// var変数宣言でも、ポインター型の場合は作成されない var ...Read now
Unlock full access