サーチ…


備考

文字列、整数、浮動小数点数、bool、構造体のようにゼロ以外のゼロ以外の値を持つ型は、nilに設定することはできません。

基本ゼロ値

Goの変数は、開始値を与えるかどうかにかかわらず、常に初期化されます。カスタムタイプを含む各タイプは、値が指定されていない場合に設定されるゼロ値を持ちます。

var myString string      // "" - an empty string
var myInt int64          // 0 - applies to all types of int and uint
var myFloat float64      // 0.0 - applies to all types of float and complex
var myBool bool          // false
var myPointer *string    // nil
var myInter interface{}  // nil

これは、マップ、スライス、チャンネル、および関数タイプにも適用されます。これらの型はnilに初期化されます。配列では、各要素はそれぞれの型のゼロ値に初期化されます。

より複雑なゼロ値

スライスでは、ゼロ値は空のスライスです。

var myIntSlice []int    // [] - an empty slice

makeを使用して値が設定されたスライスを作成すると、そのスライスに作成された値はそのスライスのタイプのゼロ値に設定されます。例えば:

myIntSlice := make([]int, 5)    // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println(myIntSlice[3])
// Prints 0

この例では、 myIntSliceあるintすなわち型のゼロ値だから全て0である5つの要素含まスライスint

newスライスを作成することもできます。スライスへのポインタが作成されます。

myIntSlice := new([]int)        // &[] - a pointer to an empty slice
*myIntSlice = make([]int, 5)    // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println((*myIntSlice)[3])
// Prints 0

注:スライスポインタはインデックス作成をサポートしていないので、 myIntSlice[3]を使用して値にアクセスすることはできません。代わりに(*myIntSlice)[3]ようにする必要があります。

構造体ゼロ値

構造体を初期化せずに構造体を作成する場合、構造体の各フィールドはそれぞれのゼロ値に初期化されます。

type ZeroStruct struct {
    myString string
    myInt    int64
    myBool   bool
}

func main() {
    var myZero = ZeroStruct{}
    fmt.Printf("Zero values are: %q, %d, %t\n", myZero.myString, myZero.myInt, myZero.myBool)
    // Prints "Zero values are: "", 0, false"
}

配列ゼロ値

Goのブログによれば:

配列は明示的に初期化する必要はありません。配列のゼロ値はすぐに使用できる配列であり、その要素自体がゼロになっています

たとえば、 myIntArrayは0のint値(0)で初期化されます。

var myIntArray [5]int     // an array of five 0's: [0, 0, 0, 0, 0]


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow