您的示例使用两种Go语言规则:
- 可以从具有值接收器的方法派生具有指针接收器的方法。这样
func (v Vertex) Abs() float64
将自动生成一个附加的方法实现:func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) }
func (v Vertex) Abs() float64 { return Vertex.Abs(v) } // GENERATED METHOD
编译器将自动找到生成的方法:
v := &Vertex{3, 4}v.Abs() // calls the generated method
- Go可以自动获取变量的地址。在以下示例中:
func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) } func main() { v := Vertex{3, 4} v.Abs() }
该表达式
v.Abs()等效于以下代码:
vp := &vvp.Abs()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)