我明白Go没有继承权并且与作品有关。
这是我的小例子:
A
我真正想要的是什么:
type Car struct {
XMLName xml.Name `xml:"response"`
// some properties coming from a XML file
}
type Audi struct {
Car
// some more properties coming from a XML file
}
func UnmarshalFromXML(url string, car *Car) { /* fill the properties from the XML file */ }
但这不起作用,因为没有继承。但我需要结构来使用XML文件的unmarshal功能。
那该怎么办?
答案 0 :(得分:3)
go
中的继承与其他语言非常不同。当从父类型扩展的类型时,这两种类型保持不同。在您的情况下,解决方案是创建一个接口,并将接口作为参数传递给函数。看看下面的例子:
package main
import (
"fmt"
)
// creating an interface
type Vehicle interface {
Move()
}
type Car struct {
Color string
Brand string
}
// Car has method Move(), automatically stated implement Vehicle interface
func (c *Car) Move() {
fmt.Print("Car is moving")
}
func(c *Car) Honk() {
fmt.Print("Teeeet... Teet")
}
type Audi struct {
EngineType string
Car
}
// passing an interface
func UnmarshalFromXML(url string, v Vehicle) {
fmt.Print(v)
v.Honk()
}
func main() {
var car = Car{Color:"Green"}
var audi = Audi{}
audi.Car = car
audi.Brand = "Audi"
audi.EngineType = "EC"
UnmarshalFromXML("someURL", &audi)
}
中的OOP进行了很好的解释
答案 1 :(得分:1)
您可以尝试使用接口
type Car interface {
theCar()
}
type CarBase struct {
}
func (_ CarBase) theCar() {
}
type Audi struct {
CarBase
}
func UnmarshalFromXML(url string, car Car)