Golang print" nil"

时间:2015-08-31 19:30:08

标签: go

我正在阅读golang教程:https://tour.golang.org/moretypes/10 我对setter如何打印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打印为z: [] z is nil! nil: <nil> 而不是[]

谢谢!

2 个答案:

答案 0 :(得分:8)

fmt包使用反射来确定要打印的内容。由于z的类型是切片,fmt使用[]符号。

由于切片,通道,接口和指针都可以为零,如果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 :(得分:0)

单词nil表示:未初始化。 在这种情况下,您正在初始化幻灯片,但尚未分配任何值。 记住PICS(指针,接口,CHANNELS和SLIDES)都已经存在 初始化。