Golang中的nil是个神奇的存在,典型的故事多,各位看官,小板凳坐好,瓜子花生茶水摆上,我们聊聊。
1. nil不是保留字、关键字
比如:可以用nil当变量名
package main
import "fmt"
func main() {
nil := 100
fmt.Print("nil could be a variable: ", nil)
}
//结果:
nil could be a variable: 100
2. nil不能比较
不论是两个nil,或者两个声明了为赋值的变量,都不能直接比较... 哪怕两个变量是同类型的...
package main
import "fmt"
func main() {
if (nil == nil) { // 两个 nil 不能比较
fmt.Println("equal")
} else {
fmt.Println("not equal")
}
}
// IDE里不报错,但是运行报错
# command-line-arguments
.\trynilcompare.go:6:5: invalid operation: nil == nil (operator == not defined on nil)
3. nil不属于任何类型,或者非官方说法”自己就是一个类型“
package main
import "fmt"
func main() {
fmt.Printf("type of nil is: %T", nil)
}
// 结果:
type of nil is: <nil>
4. nil是很多数据类型声明后未赋值时候的默认值