我只是想知道为什么 Google Go 中的字符串函数是在strings包中定义的,而不是在string数据类型本身上定义的。他们本可以轻松完成func (s string) ToUpper() string {}而不是当前func ToUpper(s string) string {}在strings包中。我的猜测是,如果您想ToUpper在扩展string(即type MyString string)的自定义类型上实现自定义版本,您将无法再访问该ToUpper类型的内置函数,但我找不到对此的任何支持。
2 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
简短的回答是:“保持语言简单。”
Go 作为一种语言只允许在同一个包中的类型上定义方法,但是因为string
(像其他内置类型一样)是在语言本身中实现的,所以没有办法向它添加方法,而不会使语言/编译器复杂化.
部分原因在于 Go 的设计方式。
有关更多信息,请参阅Rob Pike(Go 的创建者之一)的这封邮件:
Go 没有基本类型的方法,因为语言的设计者不希望为基本类型定义方法,部分原因是它们可能对接口产生连锁反应。我相信我们仍然对这个决定感到满意。其他人可能会有不同的感觉。
-抢
还有这个:
我们只是不明白这意味着什么;没什么好解释的。Go 的设计非常谨慎。
在这种情况下,看看字符串库的大小。正如安德鲁所说,在基本类型上创建所有功能方法会使语言复杂化。既然可以通过一个更易于维护、更易于扩展、更灵活的库来实现,为什么要用这些琐碎的事情来复杂化语言呢?语言要简单得多。
-抢
Qyouu
TA贡献1786条经验 获得超11个赞
- 2 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消