🧢

Goのnilスライスについて

2023/01/13に公開

はじめに

Goではつぎのようなnilスライスを定義できます。

var s []int32

この記事では、このnilスライスの挙動についてまとめます。

nilスライスの挙動

nilスライスに対して、以降の処理を実行したとき、どういった挙動になるか検証します。

nilスライスをprintしてみる

fmt.Println(s)
// []

nilとの比較

fmt.Println(s == nil)
// true

len関数を実行

fmt.Println(len(s))
// 0

cap関数を実行

fmt.Println(cap(s))
// 0

for rangeでループ

for _, _ = range s {
	fmt.Println("foo") // 実行されない
}

append関数で要素を追加

s = append(s, 123)
fmt.Println(s)
// [123]
fmt.Println(len(s))
// 1
fmt.Println(cap(s))
// 2

Discussion