为什么 Go 中的方法只能在同一个包中定义的类型上声明?

围棋之旅说的情况如下:

您只能声明具有接收器的方法,该接收器的类型定义在与该方法相同的包中。您不能使用其类型在另一个包中定义的接收器(包括内置类型,例如 int)来声明方法。

除了避免每个人都建立自己的方法之外int,还有其他原因string吗?我已经谷歌搜索,但找不到任何引用它的内容。


回首忆惘然
浏览 280回答 1
1回答

MM们

原因是如果你可以在其他包的类型上定义方法,你就可以修改其他包的行为。这是因为给定类型的方法集会影响该类型值的使用方式。例如,考虑fmt.Println函数。当您将参数传递给 时fmt.Println,它将根据一组规则打印该值的字符串表示形式。其中一条规则是,如果值的类型有一个String() string方法(即它实现了fmt.Stringer接口),那么将调用该方法以获得该值的字符串表示。因此,假设我们有一个包,foo,并且该包有一个类型,FooInt,定义如下:type FooInt int现在想象这个包也有一个功能,PrintFooInt:func PrintFooInt(f FooInt) { fmt.Println(f) }这将打印 的整数值f。但是假设您(在不同的包中,比如说main)能够向FooInt. 那么你可以这样做:func (f FooInt) String() string { return "foobar!" }这实际上会改变 的行为foo.PrintFooInt,这在包外部是不可能的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go