如果我使用指针接收器,以下代码有异常,a=v因为它是在指针 v 上定义的,这是有道理的。
package main
import (
"fmt"
"math"
)
type Abser interface {
Abs(x int) float64 //all types needs to implement this interface
}
type Vertex struct {
X float64
}
func (v *Vertex) Abs(x int) float64 {
return math.Abs(float64(x))
}
func main() {
/*define the interface and assign to it*/
var a Abser
v := Vertex{-3}
a = &v
fmt.Println(a.Abs(-3))
a = v
fmt.Println(a.Abs(-3))
}
但是,如果我将 Abs 的功能更改为
func (v Vertex) Abs(x int) float64 {
return math.Abs(float64(x))
}
两者都a=v有效a=&v,这背后的原因是什么?
繁星coding
相关分类