Go语言入门(20)-nil

Nil是一个名词,表示无或者零。在Go里,nil是一个零值。如果一个指针没有明确的指向,那么它的值就是nil。除了指针,nil还是slice、map和接口的零值。

Go语言的nil比其他语言中的null更为友好,并且用的没那么频繁,但是仍需谨慎使用。

如果指针没有明确的指向,那么程序将无法对其实施解引用,尝试解引用一个nil指针将导致程序崩溃。

为了防止panic,需要加一个判断,当要操作的变量不为nil时,才进行解引用操作。因为值为nil的接收者和值为nil的参数在行为上并没有区别,所以Go语言即使在接收者为nil的情况下,也会继续调用方法。当变量被声明为函数类型时,它的默认值是nil。检查函数值是否为nil,并在有需要时提供默认行为:

nil slice:

如果slice在声明之后没有使用复合字面值or内置的make函数进行初始化,那么它的值就是nil。

幸运的是,range、len、append等内置函数都可以正常处理值为nil的slice。

nil map:

和slice一样,如果map在声明后没有使用复合字面值or内置的make函数进行初始化,那么它的值将会是默认的nil

Nil接口:

声明为接口类型的变量在未被赋值时,它的零值是nil。对于一个未被赋值的接口变量来说,它的接口类型和值都是nil,并且变量本身也等于nil。

当接口类型的变量被赋值后,接口就hi在内部指向该变量的类型和值。

在Go中,接口类型的变量只有在类型和值都为nil时才等于nil,即使接口变量的值仍为nil,但只要它的类型不是,那么该变量就不等于nil。

检验接口变量的内部表示:

前面是类型,后面是值

nil之外的另一个选择:

如果使用指针来存储nil,大材小用。所以可以用另一种方法存储nil。

相关推荐
磐链科技12 分钟前
区块链开发入门实战:用 Hardhat 与 Ethers.js 搭建你的第一个 DApp
开发语言·javascript·区块链
csdn2015_16 分钟前
java springboot项目,接收到的参数多个逗号
java·开发语言·spring boot
捷瑞电子工坊16 分钟前
Ubuntu 下安装 VSCode 和 gcc 的简单步骤
vscode·ubuntu·代码编辑器·安装教程·gcc·deb·snap
sunoo-22923 分钟前
【网络编程 + 数据库】select 与 epoll 核心区别详解 + SQLite 入门到 C 接口全攻略
linux·网络·数据库·vscode·学习·sqlite
可乐鸡翅yeah_27 分钟前
hls.js 多实例并发踩坑,多视频页面播放器内存与冲突问题解决
开发语言·前端·javascript·音视频·hls·m3u8·m3u8在线播放
俊昭喜喜里28 分钟前
c#中的构造函数
开发语言·数据库·c#
gsls20080832 分钟前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp
hahaha601640 分钟前
HLS高层次综合设计--axi之burst纠偏
开发语言·算法·fpga开发·c#
SunnyDays10111 小时前
如何使用 Python 给 PDF 添加附件:文档附件与附件注释
开发语言·python·pdf
学逆向的1 小时前
扩展PE头属性说明
开发语言·网络安全·pe