Go语言中 nil 是一个预先定义好的标识符,它是许多类型的零值表示,有过其他编程语言开发经验的开发者也许会把 nil 看作其他语言中的 null(NULL),其实这并不是完全正确的,因为Go语言中的 nil 和其他语言中的 null 有很多不同点。
nil标识符是不能比较的
package main
import (
"fmt"
)
func main() {
fmt.Println(nil==nil)
}
运行结果如下:
PS D:\code> go run .\main.go
# command-line-arguments
.\main.go:8:21: invalid operation: nil == nil (operator == not defined on nil)
这点和 python 等动态语言是不同的,在 python 中,两个 None 值永远相等。
>>> None == None
True
从上面的运行结果不难看出,== 对于 nil 来说是一种未定义的操作。
nil没有默认类型
package main
import (
"fmt"
)
func main() {
fmt.Printf("%T", nil)
print(nil)
}
运行结果如下:
<