随笔 - 56  文章 - 0 评论 - 0 阅读 - 50714

  • 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
 
}
posted on   scala  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
阅读排行:
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 爆肝 1 周,为我的白板工具支持了 mermaid 流程图,为 ai 生成流程图铺平道路
· 如何开发 MCP 服务?保姆级教程!
· C# 工业视觉开发必刷20道 Halcon 面试题
· 从零散笔记到结构化知识库:我的文档网站建设之路
点击右上角即可分享
微信分享提示