我一直在阅读the go-lang interface doc;但是我仍然不清楚是否有可能达到我想要的目标
type A struct {
ID SomeSpecialType
}
type B struct {
ID SomeSpecialType
}
func (a A) IDHexString() string {
return a.ID.Hex()
}
func (b B) IDHexString() string {
return b.ID.Hex()
}
这样可以正常工作;但是我更喜欢一些惯用的方法将常用方法应用于两种类型,并且只定义一次。喜欢的东西:
type A struct {
ID SomeSpecialType
}
type B struct {
ID SomeSpecialType
}
func (SPECIFY_TYPE_A_AND_B_HERE) IDHexString() string {
return A_or_B.ID.Hex()
}
答案 0 :(得分:4)
实际上你不能像以前那样习惯,但你可以做的是匿名继承一个超级结构(对不起它不是法律词语:P):
type A struct {
}
type B struct {
A // Anonymous
}
func (A a) IDHexString() string {
}
B
现在可以实施IDHexString
方法。
这与许多其他语言类似:
class B extends A { ... }
答案 1 :(得分:3)
例如,使用合成,
package main
import "fmt"
type ID struct{}
func (id ID) Hex() string { return "ID.Hex" }
func (id ID) IDHexString() string {
return id.Hex()
}
type A struct {
ID
}
type B struct {
ID
}
func main() {
var (
a A
b B
)
fmt.Println(a.IDHexString())
fmt.Println(b.IDHexString())
}
输出:
ID.Hex
ID.Hex