いろいろ備忘録日記

主に .NET とか Go とか Python絡みのメモを公開しています。

Goメモ-10 (Zero values, ゼロ値, Tour of Go)

概要

Tour of Go の - Zero values についてのサンプル。

tour.golang.org

今回も特に気になる部分はありませんが、スライスとマップに関してはちょっと注意が必要。

スライスもマップもゼロ値は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

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com