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

相关推荐
cyforkk3 小时前
11、Java 基础硬核复习:常用类和基础API的核心逻辑与面试考点
java·python·面试
码农水水6 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
金庆6 小时前
Commit Hash from debug.ReadBuildInfo()
golang
无限码力6 小时前
华为OD技术面真题 - JAVA开发 - 5
java·华为od·面试·华为od技术面真题·华为od技术面八股·华为od技术面java八股文
测试界的世清7 小时前
金九银十软件测试面试题(800道)
测试工具·面试·职场和发展
不许哈哈哈7 小时前
HTTP协议基础(运维开发面试版)
http·面试·运维开发
源代码•宸7 小时前
Golang面试题库(sync.Map)
开发语言·后端·面试·golang·map·sync.map·expunged
终生成长者8 小时前
Golang cursorrule
开发语言·后端·golang
席万里8 小时前
基于Go和Vue快速开发的博客系统-快速上手Gin框架
vue.js·golang·gin
码农水水9 小时前
传音Java面试被问:HTTP/2的多路复用和头部压缩实现
java·开发语言·spring boot·后端·http·面试·职场和发展