【发布时间】:2021-11-27 21:59:58
【问题描述】:
假设我们有一个简单的接口和实现:
type Vertex struct {
X int
Y int
}
type Abser interface {
Abs() float64
}
func (v Vertex) Abs() float64 {
sum := float64(v.X + v.Y)
return math.Sqrt(sum)
}
现在我有一个接口变量:
var abser Abser
我想给它设置一个顶点。我可以设置一个的值,或者一个的地址:
v := Vertex{1, 1}
abser = v
abser = &v
两者有什么区别?为什么设置 Vertex 的 地址 有效?这与接口如何在幕后工作有什么关系?我对 Go 还是很陌生,所以任何帮助都将不胜感激????
【问题讨论】:
-
您可以为接口分配实现它的任何类型的值。
*Vertex的方法集包括在非指针类型Vertex上声明的方法,如specs 中所述。
标签: arrays go pointers interface