我遇到的情况是,函数具有以下代码:
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/