3 回答
TA贡献1963条经验 获得超6个赞
简单的答案是,nil没有定义为类型的有效值string在语言规范。
...但也许你想要一个更长的答案?
nil是指针、接口、通道、切片、映射和函数类型的零值,它表示未初始化的状态。
考虑以下变量声明:
var a *SomeType
var b interface{}
var c func()
所有这些变量都有一个表示未初始化状态的值,这似乎很自然。a已经被声明为一个指针,但是当我们还没有指向任何东西时,它会指向什么?nil是这些类型的明显零值。
至于通道、切片和映射,它们的零值很nil简单,因为它们的实现是这样的,它们必须在使用前显式初始化。这主要是出于性能原因,这些类型在内部都表示为或多或少复杂的数据结构,并且初始化它们不是免费的。
但是, astring不需要初始化,并且新字符串变量的默认零值似乎很自然是空字符串"". 因此,根本没有理由nil成为有效的字符串值,并且将其添加到规范中只会使语言变得更加复杂且使用起来更加麻烦。
此外,niltypestring 代表什么?空字符串?我们已经有了。一个未初始化的字符串?没有这样的事情。
TA贡献2012条经验 获得超12个赞
因为 Golangstring是只读的字节切片。
但是,指向字符串 (*string) 的指针可以为零:
var s *string
s = nil
readonly := "readonly"
s = &readonly
dereference := *s
https://dhdersch.github.io/golang/2016/01/23/golang-when-to-use-string-pointers.html
- 3 回答
- 0 关注
- 612 浏览
添加回答
举报
