无法返回nil,但是slice的值为零

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


func halfMatch(text1, text2 string) []string {

    ...

    if (condition) {

         return nil // That's the final code path)

    }

    ...

}

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


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


拉莫斯之舞
浏览 218回答 3
3回答

倚天杖

Nil不是类型。它是对映射,通道,指针,函数,切片和接口的零值的描述。当您在程序中添加“ nil”时,go会根据上下文为其提供类型。在大多数情况下,您无需显式键入nil。这也不例外,编译器知道它必须是[] string(nil),因为返回的类型是[] string。无字符串切片是没有后备数组且长度/容量为零的切片。您可以将其与文字“ nil”进行比较,并获得其长度和容量。它是一个[]字符串,只是空的。如果您希望有一个非零的[]字符串,请返回[] string {}。这将创建一个后备数组(长度为零),并使其不再等效于nil。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go