34. Go 语言中的 nil
AI 概述
1. nil 是特殊的零值2. nil 标识符无法比较3. 不同类型的 nil 的长度不同4. 小结
nil 是 Go 语言中内置的一个标识符,有人会把它当作其它语言中的 NULL,这个是不准确的。本文就来介绍一下 Go 语言中的 nil 的特点。
1. nil 是特殊的零值
在 Go 语言中,任何一个变量在声明之后会自动被赋予一个零值。...
目录
nil 是 Go 语言中内置的一个标识符,有人会把它当作其它语言中的 NULL,这个是不准确的。本文就来介绍一下 Go 语言中的 nil 的特点。
1. nil 是特殊的零值
在 Go 语言中,任何一个变量在声明之后会自动被赋予一个零值。数值类型的变量零值为 0,字符串为””,而指针、切片、map、通道、函数和接口的零值就是 nil。
代码示例:
package main
import (
"fmt"
)
func main() {
var m map[int]string
var p *int
var c chan int
var s []int
var f func()
var i interface{}
fmt.Printf("map:%#v\n", m)
fmt.Printf("指针:%#v\n", p)
fmt.Printf("通道:%#v\n", c)
fmt.Printf("切片:%#v\n", s)
fmt.Printf("函数:%#v\n", f)
fmt.Printf("接口:%#v\n", i)
}
执行结果:

2. nil 标识符无法比较
与其他语言不同,在 Go 语言中 nil 和 nil 之间是无法比较的。
代码示例:
package main
import (
"fmt"
)
func main() {
fmt.Println(nil == nil)
}
执行结果:

而在 Java 中:
class Untitled {
public static void main(String[] args) {
System.out.println(null==null);
}
}
以上代码会输出 true。
3. 不同类型的 nil 的长度不同
不同类型的变量的内存分配都是不同的,即使是 nil ,分配的内存也是不同的。
代码示例:
package main
import (
"fmt"
"unsafe"
)
func main() {
var m map[int]string
var p *int
var c chan int
var s []int
var f func()
var i interface{}
fmt.Println("map:", unsafe.Sizeof( m ))
fmt.Println("指针:", unsafe.Sizeof(p))
fmt.Println("通道:", unsafe.Sizeof(c))
fmt.Println("切片:", unsafe.Sizeof(s))
fmt.Println("函数:", unsafe.Sizeof(f))
fmt.Println("接口:", unsafe.Sizeof(i))
}
执行结果:

4. 小结
本文主要介绍了 Go 语言中的特殊标识符 nil 的一些特性:
- nil 是作为标识一些特殊类型变量的零值存在的;
- nil 和 nil 是无法比较的,nil 可以零值为 nil 的变量比较;
- nil 的长度随着类型变化而变化。
以上关于34. Go 语言中的 nil的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 34. Go 语言中的 nil
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 34. Go 语言中的 nil

微信
支付宝