为什么字符串函数没有在字符串类型上定义?

rpk*_*amp 6 string go

我只是想知道为什么Google Go中的字符串函数是在strings包中定义的,而不是string数据类型本身.他们可以轻松完成

func (s string) ToUpper() string {
}
Run Code Online (Sandbox Code Playgroud)

而不是当前

func ToUpper(s string) string {
}
Run Code Online (Sandbox Code Playgroud)

strings包中.

我的猜测是,如果你想ToUpper在扩展的自定义类型上实现自定义版本string(即type MyString string),你就无法再访问内置ToUpper类型了,但我找不到任何支持.

nus*_*tin 9

简短的回答是:"保持语言简单."

Go as a language只允许在同一个包中的类型上定义方法,但是因为string(就像其他内置类型一样)是在语言本身中实现的,所以没有办法向它添加方法,而不会使语言/编译器复杂化.

这也是部分原因,因为Go的设计方式.

有关更多信息,请参阅Rob Pike(Go的创建者之一)发来的这封邮件:

Go没有关于基本类型的方法,因为语言的设计者不希望为基本类型定义方法,部分原因是它们可能对接口产生连锁反应.我相信我们仍然对这个决定感到满意.其他人可能会有不一样

-抢

还有这个:

我们根本不明白其含义是什么; 没有什么可以解释的.Go的设计谨慎.

在那种情况下,请查看字符串库的大小.正如安德鲁所说,在基本类型上制作所有功能方法会使语言复杂化.当一个库可以通过一个更易于维护,更容易扩展和更灵活的库实现时,为什么要将语言与这些微不足道的东西复杂化?事情的语言简单得多.

-抢