Kav*_*ian 6

只是为了把事情说清楚。如果您运行此代码:

var m map[string]int64
log.Println(m == nil)
log.Printf("%T\n", m)

它将打印:

$ true
$ map[string]int64
mnilnil
mapnil
fmt.StringerString() stringnil
type someData struct {
    someValue string
}

func (x *someData) String() string {
    if x == nil {
        return "NO PROPER DATA HERE!"
    }

    return x.someValue
}

然后如果我们运行:

var data *someData
log.Println(data)
data = new(someData)
data.someValue = "Aloha! :)"
log.Println(data)

输出将是:

$ NO PROPER DATA HERE!
$ Aloha! :)
nil