内容简介:理解 golang 的 nil
golang 中的 nil 是不同于其他语言的,为了更好的理解 nil,在此我将尝试一步一步揭示 nil 在 golang 中的一些操作和现象。
1. nil 是不能比较的
code-1 Play
package main
import (
"fmt"
)
func main() {
fmt.Println(nil==nil)
}
code-1 输出
tmp/sandbox318449491/main.go:8: invalid operation: nil == nil (operator == not defined on nil)
这点和 python 等动态语言是不同的,在 python 中,两个 None 值永远相等。
>>> None == None True >>>
从 go 的输出结果不难看出, == 对于 nil 来说是一种未定义的操作。
2. 默认 nil 是 typed 的
code-2 Play
package main
import (
"fmt"
)
func main() {
fmt.Printf("%T", nil)
print(nil)
}
code-2 输出
tmp/sandbox379579345/main.go:9: use of untyped nil
print 的输出时未指定类型的,因而无法输出
3. 不同类型 nil 的 address 是一样的
code-3 Play
package main
import (
"fmt"
)
func main() {
var m map[int]string
var ptr *int
fmt.Printf("%p", m)
fmt.Printf("%p", ptr)
}
m 和 ptr 的 address 都是 0x0
4. 不同类型的 nil 是不能比较的
code-4 Play
package main
import (
"fmt"
)
func main() {
var m map[int]string
var ptr *int
fmt.Printf(m == ptr)
}
code-4 输出
tmp/sandbox618627491/main.go:10: invalid operation: m == ptr (mismatched types map[int]string and *int)
5. nil 是 map,slice,pointer,channel,func,interface 的零值
code-5 Play
package main
import (
"fmt"
)
func main() {
var m map[int]string
var ptr *int
var c chan int
var sl []int
var f func()
var i interface{}
fmt.Printf("%#v\n", m)
fmt.Printf("%#v\n", ptr)
fmt.Printf("%#v\n", c)
fmt.Printf("%#v\n", sl)
fmt.Printf("%#v\n", f)
fmt.Printf("%#v\n", i)
}
code-5 输出
map[int]string(nil) (*int)(nil) (chan int)(nil) []int(nil) (func())(nil) <nil>
zero value 是 go 中变量在声明之后但是未初始化被赋予的该类型的一个默认值。
正确理解 nil 是正确理解 go 中类型的重要一环,因而 nil 的任何细节在遇到之后都不要错过,要做到相应的记录。
关注 wecatch 公众号, 获取最新文章信息
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 理解原型其实是理解原型链
- 要理解深度学习,必须突破常规视角去理解优化
- 深入理解java虚拟机(1) -- 理解HotSpot内存区域
- 荐 【C++100问】深入理解理解顶层const和底层const
- 深入理解 HTTPS
- 深入理解 HTTPS
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
jQuery实战
Bear Bibeault、Yehuda Katz / 陈宁 / 人民邮电出版社 / 2009.1 / 49.00元
《jQuery实战》全面介绍jQuery知识,展示如何遍历HTML文档、处理事件、执行动画以及给网页添加Ajax。书中紧紧地围绕“用实际的示例来解释每一个新概念”这一宗旨,生动描述了jQuery如何与其他工具和框架交互以及如何生成jQuery插件。jQuery 是目前最受欢迎的JavaScript/Ajax库之一,能用最少的代码实现最多的功能。 点击链接进入新版: jQuery......一起来看看 《jQuery实战》 这本书的介绍吧!