2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
Go 不支持繼承,但也許您會發(fā)現(xiàn)以下方法是可以容忍的。
使用 來定義 的行為:interface
Animal
type Animal interface {
GetName() string
GetOrigin() string
GetSpeed() float32
}
使用“基”類型,該類型將包含公共字段并實(shí)現(xiàn)以下行為:
type AnimalBase struct {
Name string
Origin string
}
func (a AnimalBase) GetName() string { return a.Name }
func (a AnimalBase) GetOrigin() string { return a.Origin }
func (a AnimalBase) GetSpeed() float32 { return -1 }
嵌入“基”類型并覆蓋您需要的任何行為:
type Bird struct {
AnimalBase
Speed float32
CanFly bool
}
func (b Bird) GetSpeed() float32 { return b.Speed }
然后。。。
func checkAminalSpeed(a Animal) {
if speed := a.GetSpeed(); speed == -1 {
fmt.Println("I don't have speed")
} else {
fmt.Println(speed)
}
}
https://play.golang.org/p/KIjfC7Rdyls

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個贊
姆科普里瓦是對的。Go不支持繼承,也可以使用反射和接口{}
ps:反映比接口更多的時間
package main
import (
"fmt"
"reflect"
)
type Animal struct {
Name string
Origin string
}
type Bird struct {
Animal
Speed float32
CanFly bool
}
type Bear struct {
Animal
Lazy bool
}
func checkAminalSpeed (a interface{}){
v := reflect.ValueOf(a)
if f, ok := v.Type().FieldByName("Speed"); ok{
fmt.Printf("%v\n", f)
}
}
func main() {
checkAminalSpeed(Bird{})
checkAminalSpeed(Bear{})
}
- 2 回答
- 0 關(guān)注
- 90 瀏覽
添加回答
舉報