Methods 方法接收器
Go方法接收器接受一个类型以及该类型的变量名,例如:Methods 方法接收器,methods,syntax,go,Methods,Syntax,Go,Go方法接收器接受一个类型以及该类型的变量名,例如: type MyFloat float64 func (x MyFloat) Abs() float64 { if x < 0 { return float64(-x) } return float64(x) } func main() { f := MyFloat(-math.Sqrt2) fmt.Println(f.Abs()) } 我的假设是,在Java中,golang允
type MyFloat float64
func (x MyFloat) Abs() float64 {
if x < 0 {
return float64(-x)
}
return float64(x)
}
func main() {
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs())
}
我的假设是,在Java中,golang允许任何名称吗?是这样吗?您的假设是准确的:接收方必须在方法定义中明确命名。它避免了任何歧义。在您的示例中,Go编译器如何猜测x是接收器
请注意,使用“self”或“this”或“me”作为接收方名称在go中被认为是不好的风格。名字应该很短——一个字母就可以了。请参阅中的更多信息。我认为您没有正确地使用它,您应该在结构中使用它。如果接收者引用结构的字段 例如:
package main
import "fmt"
type Decimal struct {
first float64
}
func (x Decimal) out() float64 {
return x.first
}
func main() {
var start Decimal
start.first = 10.8
show := start.out()
fmt.Println(show)
}
这是一种设计选择
Java使用此
,Go lang选择另一个机械师
在围棋中,让接受者成为或不是指针是合法的
让我们看看:
func (t Type) Id() { return t }
func (t *Type) IdPointer() { return t }
如果使用Java的设计呢
它将成为:
func (Type) Id() { return this }
func (*Type) IdPointer() { return this }
首先,混淆了什么是(*类型)
其次,它也可以是指针或值。也很困惑
但是,无论如何,你可以这样设计Go lang
毕竟这是一种选择。它说“不要使用诸如“me”、“this”或“self”之类的通用名称,这些标识符是面向对象语言的典型标识符,它们更强调方法而不是函数”。绑定到接收器的函数是一种方法。这是一个有效的stmt吗?如果是的话,我不完全理解为什么使用this或self是不好的,因为它会强调方法作用于类型实例的事实?好问题。我无法理解,为什么go语言创建者(参见变量大小写等确定可见性)的“约定优先于配置”策略会使
的名称可配置。一个方法中是否可能有两个接收器,或者为什么有人需要这样做这是任何人都可以很快习惯的惯例。
func (Type) Id() { return this }
func (*Type) IdPointer() { return this }