2 回答
TA贡献1155条经验 获得超0个赞
它可以。只需在结构而不是指针上定义它即可。它将解决两种方式
方法集
指针类型* T的方法集是接收者* T或T的所有方法的集(也就是说,它也包含T的方法集)
尝试直播:http://play.golang.org/p/PsNUerVyqp
package main
import (
"fmt"
"math"
)
type Abser interface {
Abs() float64
}
type Vertex struct {
X, Y float64
}
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := Vertex{5, 10}
v_ptr := &v
fmt.Println(v.Abs())
fmt.Println(v_ptr.Abs())
}
更新:根据评论,我创建了一个额外的示例,该示例实际上利用Abser接口来说明值和指针都满足该接口。
https://play.golang.org/p/Mls0d7_l4_t
TA贡献1827条经验 获得超9个赞
例如,在考虑时:
type T U
func (t *T) M() int { return 1 }
var t T
...我们现在可以通过编写来调用M(),t只要t.M()语言允许,即使在其基础(非指针)类型的实例上,也可以使用指针接收器调用方法,即,它等效于(&t).M()。
如果现在允许它另外定义:
func (t T) M() int { return 2 }
...然后无法告诉现在t.M()应该返回什么。
- 2 回答
- 0 关注
- 173 浏览
添加回答
举报