- go 语言中的 nil 是一个代表引用(切片、映射、通道)、指针、函数、接口 零值的预定义变量。
- 值类型不可能为 nil . 所以数字、结构体、字符串 不可能为空 (不用担心空指针异常了)
- 设置 引用变量 = nil 和声明后未赋值的初始化零值状态是一样的。引用类型 = nil 不是未初始化状态,仍可以调用它们的方法获得有意义的值。
- 指针为 nil 的状态 必须重新指定一个地址,否则不能对 nil 地址位置的值修改操作
- 接口为 nil 的状态 就是一个空接口,函数为 nil 的状态 不能调用 编译可以通过但是会发生运行时错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /** // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice type. // Type must be a pointer, channel, func, interface, map, or slice type var nil Type */ package main import "fmt" func main() { //引用 <切片、映射、通道> var x map [string]string //显式初始化为 = nil 和声明类型后不明确赋值效果都是一样的 fmt.Println(x) //map[] , x == nil : true var y []int // = nil fmt.Println(y) //[] , x == nil : true //指针 var z *int // = nil fmt.Println(z) //<nil> , x == nil : true //函数 var f func (int) int fmt.Println(f) //<nil> , x == nil : true //接口 var i interface {} fmt.Println(i) //<nil> , x == nil : true } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 爆肝 1 周,为我的白板工具支持了 mermaid 流程图,为 ai 生成流程图铺平道路
· 如何开发 MCP 服务?保姆级教程!
· C# 工业视觉开发必刷20道 Halcon 面试题
· 从零散笔记到结构化知识库:我的文档网站建设之路