概要
Tour of Go の - Zero values についてのサンプル。
今回も特に気になる部分はありませんが、スライスとマップに関してはちょっと注意が必要。
スライスもマップもゼロ値はnil。なので、 nil かどうかを聞くと True ですが
fmt.Printf関数とかで%v
で出力するとnilとは表示されずに []
と表示されます。
%#v
で表示すると []int(nil)
と表示されます。
この方がわかりやすいですが、値としてはnilです。
なので、サンプルのみ
サンプル
package tutorial import ( "fmt" "strings" ) // ZeroValue は、 Tour of Go - Zero values (https://tour.golang.org/basics/12) の サンプルです。 //noinspection GoNilness func ZeroValue() error { // ------------------------------------------------------------ // 初期値 // 変数に初期値を与えずに宣言すると、「ゼロ値」が設定される // ゼロ値は型によって異なる // // - 数値型は 0 // - bool型は false // - string型は "" // - 配列は長さ0の配列 // - スライスはnil // - マップはnil // ------------------------------------------------------------ var ( zeroInt int zeroBool bool zeroString string zeroArray [0]int zeroSlice []int zeroMap map[int]int ) _print(zeroInt, zeroBool, zeroString, zeroArray, zeroSlice, zeroMap) _print(len(zeroArray), len(zeroSlice), len(zeroMap)) if zeroSlice == nil { fmt.Println("zeroSlice is nil") } if zeroMap == nil { fmt.Println("zeroMap is nil") } return nil } func _print(items ...interface{}) { formats := make([]string, len(items), len(items)) for i := 0; i < len(formats); i++ { formats[i] = "%#v" } format := strings.Join(formats, "\t") if len(format) > 0 { format = fmt.Sprintf("%v\n", format) } fmt.Printf(format, items...) }
try-golang/tutorial_gotour_06_zerovalue.go at master · devlights/try-golang · GitHub
実行すると以下な感じ。
[Name] "tutorial_gotour_zerovalue" 0 false "" [0]int{} []int(nil) map[int]int(nil) 0 0 0 zeroSlice is nil zeroMap is nil
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場