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

相关推荐
callJJ13 分钟前
深入浅出 MVCC —— 从零理解 MySQL 并发控制
数据库·mysql·面试·并发·mvcc
银发控、1 小时前
MySQL覆盖索引与索引下推
数据库·mysql·面试
NEXT061 小时前
数组转树与树转数组
前端·数据结构·面试
We་ct1 小时前
浏览器 Reflow(重排)与Repaint(重绘)全解析
前端·面试·edge·edge浏览器
ssshooter1 小时前
看完就懂 useLayoutEffect
前端·react.js·面试
晴殇i2 小时前
前端防调试攻防战:如何保护你的JavaScript代码不被“偷窥”?
前端·javascript·面试
晴殇i2 小时前
深入浅出 XSS:原理、危害与全方位防御指南
前端·面试
莫寒清2 小时前
MyBatis 如何防止 SQL 注入?
面试·mybatis
J_liaty2 小时前
Spring Cloud 微服务面试高频题
spring cloud·微服务·面试