我只是想知道为什么Google Go中的字符串函数是在strings包中定义的,而不是在string数据类型本身上定义的。他们本可以轻松完成
strings
string
func (s string) ToUpper() string { }
而不是当前
func ToUpper(s string) string { }
在strings包装中。
我的猜测是,如果您想ToUpper在扩展的自定义类型上实现的自定义版本string(即type MyString string),则无法再访问该ToUpper类型的内置函数,但是我找不到对此的任何支持。
ToUpper
type MyString string
简短的答案是:“保持语言简单”。
作为一种语言运行,仅允许在同一程序包中的类型上定义方法,但是由于string(像其他内置类型一样)是在语言本身中实现的,因此无法在不使语言/编译器复杂化的情况下向其中添加方法。 。
也有一部分是因为Go的设计方式。
有关更多信息,请参阅Rob Pike(Go的创建者之一)发送的邮件:
Go没有针对基本类型的方法,因为该语言的设计人员不希望为基本类型定义方法,部分原因是因为它们可能会对接口产生连锁反应。我相信我们大家仍然对这一决定感到满意。其他人可能会有不同的感觉。 -抢
Go没有针对基本类型的方法,因为该语言的设计人员不希望为基本类型定义方法,部分原因是因为它们可能会对接口产生连锁反应。我相信我们大家仍然对这一决定感到满意。其他人可能会有不同的感觉。
-抢
而这一次太:
我们根本不了解其中的含义。没有什么可解释的。Go的设计非常谨慎。 按照这种方式,查看字符串库的大小。如安德鲁所说,在基本类型上使用所有这些功能方法会使该语言复杂化。如果通过可维护,更容易扩展和更灵活的库实现语言的功能,为什么还要使语言复杂化呢?语言要简单得多。 -抢
我们根本不了解其中的含义。没有什么可解释的。Go的设计非常谨慎。
按照这种方式,查看字符串库的大小。如安德鲁所说,在基本类型上使用所有这些功能方法会使该语言复杂化。如果通过可维护,更容易扩展和更灵活的库实现语言的功能,为什么还要使语言复杂化呢?语言要简单得多。