pointers - Golang 向下类型转换结构

标签 pointers go

我在 Go 方面相对较新,并且在初始化结构方面苦苦挣扎。

经典的例子是

type Car struct {
    wheelCount int
}
type Ferrari struct {
   Car
   driver string
}

// Initialise Ferrari
f := Ferrari{Car{4},"Some Dude"}

我的问题是,如果我只有用构造函数创建的 *Car,我如何获得 *Ferrari?

我希望能够像下面这样

func NewCar(wheels int) *Car{
    return &Car{wheels};
}

car := NewCar(4);
ferrari := Ferrari{car,"Some Dude"}; // ERROR cannot use car (type *Car) as type Car in field value

我是否错误地处理了问题?能否以某种方式简单地取消对汽车的引用?

最佳答案

错误信息很清楚。您不能将 Car 用作指向 Car 的指针。您需要重新定义 Ferrari 以嵌入指向 Car

的指针
type Ferrari struct {
    *Car
    driver string
}

或取消引用文字中的指针:

ferrari := Ferrari{*car, "Some Dude"}

关于pointers - Golang 向下类型转换结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30934792/

相关文章:

c++ - 函数内部动态分配的内存泄漏

c - 如何将 FILE* 数组传入函数

C#:使用指针类型作为字段?

go - 使用速记分配/声明将返回值分配给结构成员

go - 大型项目的包层次结构

c++ - 将const char *分配给char *

c - 按字符串对结构体数组进行排序

math - Go:如何划分巨大的数字?

go - 如何将 GOPATH 链接到 LiteIDE?

c++ - 如何在cgo中从打包的struct处理char *?