我只是想知道为什么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类型了,但我找不到任何支持.
简短的回答是:"保持语言简单."
Go as a language只允许在同一个包中的类型上定义方法,但是因为string(就像其他内置类型一样)是在语言本身中实现的,所以没有办法向它添加方法,而不会使语言/编译器复杂化.
这也是部分原因,因为Go的设计方式.
有关更多信息,请参阅Rob Pike(Go的创建者之一)发来的这封邮件:
Go没有关于基本类型的方法,因为语言的设计者不希望为基本类型定义方法,部分原因是它们可能对接口产生连锁反应.我相信我们仍然对这个决定感到满意.其他人可能会有不一样
-抢
还有这个:
我们根本不明白其含义是什么; 没有什么可以解释的.Go的设计谨慎.
在那种情况下,请查看字符串库的大小.正如安德鲁所说,在基本类型上制作所有功能方法会使语言复杂化.当一个库可以通过一个更易于维护,更容易扩展和更灵活的库实现时,为什么要将语言与这些微不足道的东西复杂化?事情的语言简单得多.
-抢
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |