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())
}
更新:根據評論,我創(chuàng)建了一個額外的示例,該示例實際上利用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 關注
- 193 瀏覽
添加回答
舉報