如果我使用指针接收器,以下代码有异常,a=v因为它是在指针 v 上定义的,这是有道理的。package mainimport ( "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,这背后的原因是什么?
1 回答
繁星coding
TA贡献1797条经验 获得超4个赞
像这样理解它,因为我没有合适的资源来引用答案;当接口在值上实现时,Go 很乐意将指针结构的副本作为值传递,您可以通过打印变量的地址来检查这一点;这是因为这个操作被认为是安全的并且不能改变原始值;
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消