
在 Go 中,应使用内置函数 len() 检查切片长度是否为 0 来判断其是否为空,而非尝试与空切片字面量(如 [])进行相等比较——后者语法错误且不可行。
在 go 中,应使用内置函数 `len()` 检查切片长度是否为 0 来判断其是否为空,而非尝试与空切片字面量(如 `[]`)进行相等比较——后者语法错误且不可行。
在 Go 语言中,切片(slice)是引用类型,其零值为 nil,但需注意:nil 切片与长度为 0 的非 nil 切片在语义上均视为空,且 len() 对二者均返回 0。因此,最简洁、高效且符合 Go 惯用法的判空方式是:
r := getData() // 假设返回类型为 []int 或其他切片类型
if len(r) == 0 {
fmt.Println("No return value")
} else {
fmt.Printf("Got %d items: %v\n", len(r), r)
}你也可以直接在条件中调用并判断,避免中间变量:
if len(getData()) == 0 {
fmt.Println("No return value")
}⚠️ 注意事项:
- ❌ r == [] 是非法语法:Go 不允许使用空切片字面量 [] 进行比较(编译报错 cannot compare slice using ==),因为切片不可比较(除非元素类型可比较且切片为数组类型,但 []T 本身不可比较)。
- ❌ r == nil 仅能检测 nil 切片,但无法覆盖非 nil 的空切片(例如 make([]int, 0)),导致漏判。而 len(r) == 0 同时涵盖 nil 和 len == 0 两种空状态,语义完整、安全可靠。
- ✅ len() 是 O(1) 时间复杂度操作,无性能开销,是 Go 官方推荐的标准做法。
总结:始终优先使用 len(slice) == 0 判断切片是否为空——它简洁、通用、健壮,且完全符合 Go 的设计哲学与最佳实践。

















