Golang向下铸造结构

时间:2015-06-19 09:37:07

标签: pointers go

我是Go的新手,并且在初始化结构时苦苦挣扎。

经典的例子是

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

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

我的问题是,如果我只使用构造函数创建* Car,我如何获得*法拉利?

我希望能够达到如下内容

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

我是否错误地接近了这个问题?可以用某种方式简单地取消引用汽车吗?

1 个答案:

答案 0 :(得分:3)

错误信息非常清楚。您无法使用Car作为指向Car的指针。您需要重新定义Ferrari以嵌入指向Car

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

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

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