如何不依赖len()函数安全判断已初始化非nil切片是否为空
不借助len()判断非nil切片是否为空的安全方法
针对你遇到的场景,这里提供两种安全的实现方式:
方法1:与同类型空切片直接比较
如果切片的元素类型是可比较类型(如int、string、不含切片/map/函数的struct等),可以直接将目标切片和同类型的空切片做相等判断:
// 示例:int类型切片 s := make([]int, 0) // 非nil的空切片 if s == []int{} { // 切片为空 }
注意:如果切片元素包含不可比较类型(如切片、map),这种方法会编译报错,此时建议用第二种方法。
方法2:利用range循环特性
空切片的range循环不会执行任何迭代,我们可以借助这一点判断切片是否为空,这种方法适用于所有类型的切片,且完全安全:
isEmpty := true // 只要切片有元素,循环会执行一次 for range s { isEmpty = false break // 无需遍历全部元素,找到第一个就退出 } if isEmpty { // 切片为空 }
另外需要注意:你之前尝试的索引第一个元素的方式不可行,因为空切片的长度为0,索引访问会触发越界panic,绝对不能在不确定切片长度的情况下直接索引访问元素。
内容的提问来源于stack exchange,提问作者PotatoDeveloper
相关产品推荐
相关产品推荐

