go - 不能返回 nil,但 slice 的值为零

标签 go

我遇到的情况是,函数具有以下代码:

func halfMatch(text1, text2 string) []string {
    ...
    if (condition) {
         return nil // That's the final code path)
    }
    ...
}

正在返回 []string(nil) 而不是 nil。起初,我认为也许在具有特定返回类型的函数中返回 nil 只会返回该类型的零值实例。但后来我尝试了一个简单的 test但事实并非如此。

有人知道为什么 nil 会返回一个空字符串 slice 吗?

最佳答案

Nil 不是一种类型。它是对映射、 channel 、指针、函数、 slice 和接口(interface)的零值的描述。

当你在你的程序中放入“nil”时,go 会根据上下文赋予它一个类型。大多数情况下,您永远不需要显式输入 nil。这也不异常(exception),编译器知道它必须是一个 []string(nil),因为返回的类型是 []string。

nil 字符串 slice 是没有后备数组且长度/容量为零的 slice 。你可以把它比作字面的“nil”,可以得到它的长度和容量。它是一个 [] 字符串,只是空的。如果你希望有一个不为 nil 的空 []string,返回 []string{}。这将创建一个支持数组(长度为零)并使其不再等同于 nil。

关于go - 不能返回 nil,但 slice 的值为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13969492/

相关文章:

Golang rpc获取错误的结构变量

go - Kafka : Sarama, 幂等性和 transactional.id

go - 我如何等待对多个其他 Goroutines 的单个 Goroutine 响应?

golang 应用程序的 Docker 临时图像找不到二进制 "no such file or directory"

go - 如何在 Bazel 中将 Google API 与 Go 结合使用

go - 不能要求某个版本的非模块 Go 包

http - Network/Golang - "GET"请求剖析

go - 我可以在我的 Web 应用程序中使用 PAM 进行身份验证吗?

if-statement - 如何在结构初始化中添加if语句

go - 测试中的模拟方法