1 回答
TA贡献1815条经验 获得超13个赞
我可以将 Vehicle 对象分配给 Car 对象
你是说对面吗?在 OOP 中,您不能将 Vehicle 分配给 Car,但可以将 Car 或 Van 分配给 Vehicle。
如果是这样,您当然可以在 Go 中执行此操作:
var v Vehicle
c := Car{Vehicle:Vehicle{1}}
v = c.Vehicle
fmt.Println(v) // prints {1}
此示例还演示了您可以准确地初始化您想要的字段。但是,这种类型的对象构造非常有限,因此构造方法通常用于获得类似构造函数的行为:
func CreateVehicle(wheels int) Vehicle {
return Vehicle{wheels}
}
func CreateCar(wheels int, maker string) Car {
return Car{CreateVehicle(wheels), maker}
}
func main() {
var v Vehicle
c := CreateCar(4, "Ford")
v = c.Vehicle
fmt.Println(v)
}
顺便说一句,如果您通常使用引用类型,那么 Go 中的引用管理可能会很棘手。结构总是按值传递。要通过引用传递它,请使用&获取引用并*指定 byref 参数。
所以,这行不通:
func (v Vehicle) SetNumberOfWeels(wheels int) {
v.wheelCount = wheels
}
func main() {
v := Vehicle{}
v.SetNumberOfWeels(5)
fmt.Println(v) // prints {0}
}
但这将:
func (v *Vehicle) SetNumberOfWeels(wheels int) {
v.wheelCount = wheels
}
func main() {
v := Vehicle{}
v.SetNumberOfWeels(5)
fmt.Println(v) // prints {5}
}
- 1 回答
- 0 关注
- 648 浏览
添加回答
举报