Golang打印"nil"

6
我正在阅读Golang教程:https://tour.golang.org/moretypes/10,并且对于fmt.Println如何打印nil值感到困惑,希望你能帮我解决。
package main

import "fmt"

func main() {

    var z []int
    fmt.Println("z: ", z)
    if z == nil {
        fmt.Println("z is nil!")
    } 
    fmt.Println("nil:", nil)
}

结果是:

z:  []
z is nil!
nil: <nil>

自z是nil时,为什么打印的是[]而不是<nil>
谢谢!
2个回答

13
fmt 包使用反射来确定需要打印的内容。由于 z 的类型是一个 slice,fmt 使用了 [] 符号。
由于 slices、channels、interfaces 和 pointers 都可以是 nil,当 fmt 能够识别到时,它会打印出不同的信息。如果您需要更多的上下文信息,请使用 %v 格式: http://play.golang.org/p/I1SAVzlv9f
var a []int
var b chan int
var c *int
var e error
fmt.Printf("a:%#v\n", a)
fmt.Printf("b:%#v\n", b)
fmt.Printf("c:%#v\n", c)
fmt.Printf("e:%#v\n", e)

打印:

a:[]int(nil)
b:(chan int)(nil)
c:(*int)(nil)
e:<nil>

-1

Nil这个词的意思是:未初始化。 在这种情况下,您正在初始化幻灯片,但尚未分配任何值。 请记住,指针、接口、通道和幻灯片(PICS)都已经初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接