为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
拉莫斯之舞 2021-05-18 17:02:44
我遇到的情况是带有以下代码的函数:func halfMatch(text1, text2 string) []string {    ...    if (condition) {         return nil // That's the final code path)    }    ...}返回[]string(nil)而不是零。起初,我认为也许返回nil具有特定返回类型的函数只会返回该类型的零值实例。但是后来我尝试了一个简单的测试,事实并非如此。有人知道为什么会nil返回一个空的字符串切片吗?
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

Nil不是类型。它是对映射,通道,指针,函数,切片和接口的零值的描述。

当您在程序中添加“ nil”时,go会根据上下文为其提供类型。在大多数情况下,您无需显式键入nil。这也不例外,编译器知道它必须是[] string(nil),因为返回的类型是[] string。

无字符串切片是没有后备数组且长度/容量为零的切片。您可以将其与文字“ nil”进行比较,并获得其长度和容量。它是一个[]字符串,只是空的。如果您希望有一个非零的[]字符串,请返回[] string {}。这将创建一个后备数组(长度为零),并使其不再等效于nil。


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信