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

rpkamp:

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

func (s string) ToUpper() string {
}

而不是当前

func ToUpper(s string) string {
}

strings包装中。

我的猜测是,如果要ToUpper在扩展的自定义类型上实现的自定义版本string(即type MyString string),则无法再访问该ToUpper类型的内置函数,但是我对此找不到任何支持。

努斯卡汀:

简短的答案是:“保持语言简单”。

作为一种语言运行,仅允许在同一包中的类型上定义方法,但是由于string(与其他内置类型一样)是在语言本身中实现的,因此无法在不增加语言/编译器复杂性的情况下向其中添加方法。 。

部分原因是因为Go的设计方式。

有关更多信息,请参见Rob Pike(Go的创建者之一)发送的邮件

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

-抢

这一次太:

我们根本不了解其中的含义。没有什么可解释的。Go的设计非常谨慎。

按照这种方式,查看字符串库的大小。如安德鲁所说,在基本类型上使用所有功能方法会使该语言复杂化。如果通过可维护,易于扩展和灵活的库来实现,那么为什么要将语言与这些琐碎的事情复杂化?语言要简单得多。

-抢

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章