Golang对nil的Slice和空Slice处理是一致的吗

Go中,nilslice和空的slice并不完全相同,尽管它们的许多行为在很多情况下是相似的。

nil slice

go 复制代码
var s []int

在这种情况下,s是一个nilslice。它的容量和长度都为0,且没有指向任何底层的数组。

空slice

go 复制代码
s := []int{}
// s := make([]int, 0)

上述两种情况下,s都是一个空的slice,它的长度和容量都为0,但是它又一个非nil的零长度的底层数组。

在许多操作中,nil和空slice的行为是一样的,比如获取长度(len()),容量(cap()),追加元素(append())等。但是在与nil比较的时候,就不一样了。

go 复制代码
var s1 []int
s2 := []int{}

fmt.Println(s1 == nil) // true
fmt.Println(s2 == nil) // false

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

相关推荐
智商低情商凑7 小时前
Go学习之 - Goroutines和channels
开发语言·学习·golang
半桶水专家7 小时前
Go 语言时间处理(time 包)详解
开发语言·后端·golang
编程点滴7 小时前
Go 重试机制终极指南:基于 go-retry 打造可靠容错系统
开发语言·后端·golang
敲敲了个代码8 小时前
CSS 像素≠物理像素:0.5px 效果的核心密码是什么?
前端·javascript·css·学习·面试
月屯11 小时前
后端go完成文档分享链接功能
开发语言·后端·golang
沐怡旸12 小时前
【底层机制】Android图形渲染体系深度解析:VSync信号机制
android·面试
TF男孩13 小时前
写代码不怕Bug,就怕合同里有“竞业陷阱”
面试
沐怡旸13 小时前
【穿越Effective C++】23.宁以non-member、non-friend替换member函数
c++·面试
喵了几个咪13 小时前
Golang微服务框架Kratos实现Thrift服务
开发语言·微服务·golang
晴殇i16 小时前
用户登录后,Token 到底该存哪里?从懵圈到精通的全方位解析
前端·面试