golang中的nil

golang中的nil文章目录基本指针 sliceinterfa map func 基本 golang 中的关键词 nil 表示空 与其他语言中的 null 可能使用有较大区别 nil 甚至可以说不是 golang 中的关键词 而只是一个变量名 如下 builting go 的代码 varnilTypego 中针对不同的类型 nil 有不同的判空方式指针结论 当一个指针 所有值类型的指针 包括了 struct 没有指向任何值 那么它就可以等于 nil 下方代码给指针类型赋 nilvara

基本

golang 中的关键词 nil 表示空,与其他语言中的 null 可能使用有较大区别。nil 甚至可以说不是 golang 中的关键词,而只是一个变量名,如下 builting.go 的代码

var nil Type 

golang 中针对不同的类型,nil 有不同的判空方式

指针

结论:当一个指针(所有值类型的指针,包括了 struct),没有指向任何值,那么它就可以等于 nil

下方代码给指针类型赋 nil

var a *int = nil 

slice

结论:当指针指向是 nil,且 len 和 cap 都是 0,该 slice 才等于 nil

var arr1 []int // true fmt.Println(arr1 == nil) arr2 := []int{ 
   } // false fmt.Println(arr2 == nil) 

我们可以看到 arr1 是 nil,因为它指向为空,len 和 cap 都是 0,arr2 不是 nil,即使 len 和 cap 都是 0,但是 arr2 指向不是空,arr2 依然是 nil

interface

结论:当 type 和 value 都是 nil 的时候,此 interface 才等于 nil

type A interface{ 
   } type B struct{ 
   } var a1 A // true fmt.Println(a1 == nil) var a2 A = (*B)(nil) // false fmt.Println(a2 == nil) var b1 *B // false fmt.Println(A(b1) == nil) var b2 *B // true fmt.Println(A(b2) == (*B)(nil)) 

我们可以看到 a1 是 nil,因为这个接口 type 和值都是空;a2 不是 nil,因为 a2 获得了一个赋值存在类型 B 所以 a2 不是 nil;b1 转成 A 后不是 nil,因为转化后的接口存在类型 B,所以 b1 转成 A 后不是 nil;b2 转成 A 后,是存在带有 B 类型的 nil,所以最后一个现实也是 true

channel/map/func

简单说都是一个指针指向一堆实现,我们简单看成指针就行了,如果这些指针没有指向就是 nil 了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225180.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:55
下一篇 2026年3月17日 上午9:55


相关推荐

  • 0xffffffff颜色值是怎么读的「建议收藏」

    0xffffffff颜色值是怎么读的「建议收藏」平常看到的大多数是十六进制的,#f5f5f5。但是在自定义控件的时候,有些地方使用了像0xffffffff,这些设置颜色,在百度给的也不太明确,后来查找发现,原来是在C语言中十六进制数必需以0x开头,以0x开头的数即表明它是一个十六进制的数,真正的数是0x后的值,所以,这种颜色值,0x不用管,接着的两位数ff是表示透明度,再接着的六位数就是平常看的#ffffff了。

    2022年5月17日
    51
  • C/C++中的freopen()函数使用详解

    C/C++中的freopen()函数使用详解C C 重定向标准输入输出的库函数 所谓重定向输出 就是可以把原本只是输出在控制台的字符 输出到你指定的路径文件中 输入类似 就是从指定的文件中读取 而不是读取在控制台中的输入 重定向函数可以在任何时候开启 关闭 函数名 freopen 标准声明 FILE freopen constchar path constchar mode FILE stream

    2026年3月19日
    2
  • java 输入语句_java怎样输入语句

    java 输入语句_java怎样输入语句java 输入语句的方法 1 输入单个字符 charc char System in read 2 输入整数或者字符串 inta cin nextInt 3 可以用 BufferedRead 类输入 java 输入语句的方法 如果你要进行输入 请一定加上两个包 importjava util importjava io 请看下面例子用于输入单个字符 importjava i

    2026年3月17日
    2
  • 数据分析:使用Imblearn处理不平衡数据(过采样、欠采样)

    数据分析:使用Imblearn处理不平衡数据(过采样、欠采样)现实环境中 采集的数据 建模样本 往往是比例失衡的 比如网贷数据 逾期人数的比例是极低的 千分之几的比例 对于这样的数据很难建立表现好的模型 好在 Python 有 Imblearn 包 它就是为处理数据比例失衡而生的 一 安装 Imblearn 包 pip3installi 二 过采样正样本严重不足 那就补充正样本 使用 imblearn 包中的 over sampling 进行过

    2026年3月17日
    3
  • Python写入Excel文件-多种实现方式(测试成功,附代码)

    目录xlsxwriter库储存数据到excel简介示例:写入excel更多添加工作表样式:写入单元格数据插入图片写入超链接插入图表pandas库储存数据到excel简介示例:写入excelopenpyxl库储存数据到excel示例:写入excel更多打开已有文件根据数字得到字母,根据字母得到数字删除工作表查看表名和选择表(sheet)设置单元格风格xlsxwriter库储存数据到excel简介功能比较强:支..

    2022年4月3日
    422
  • 写java代码的软件_新手编写java代码使用什么软件

    写java代码的软件_新手编写java代码使用什么软件新手编写java代码常用的编辑器有:1、eclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。(视频教程推荐:java视频)2、notepad++Notepad++是在微软视窗环境…

    2022年5月7日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号