3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為您使用的術(shù)語(yǔ)正在給您帶來問題。簡(jiǎn)而言之,您只需要像這樣引用內(nèi)部結(jié)構(gòu);Put(dataBLock.FSEntity)
但需要澄清的是,這里沒有父/子關(guān)系。您正在使用一種稱為嵌入的語(yǔ)言功能,其工作方式類似于組合(即一種類型由其他類型組成),只有您嵌入的內(nèi)容將其字段/方法提升到嵌入范圍。出于這個(gè)原因,您不能傳入您稱為“孩子”的類型,因?yàn)檫@里沒有像從類型繼承時(shí)那樣的多態(tài)行為,而是您的類型是由它組成的,但您可以訪問它的字段而無需額外的間接級(jí)別。由于您的方法接受嵌入類型作為參數(shù),因此您必須顯式引用它才能僅傳遞它。外部結(jié)構(gòu)絕不是那種類型。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
它不完全是繼承,其想法是將 Put 定義為方法
func (entity FSEntity) Put() {....}
然后嵌入后
type DataBlock struct {
FSEntity
data []byte
}
DataBlock 可以使用這個(gè)方法
dataBLock.Put()

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
解決它的最簡(jiǎn)單方法是滿足參數(shù)的類型:傳遞一個(gè)FSEntity. 如果您只需FSEntity要從嵌入它的結(jié)構(gòu)中獲取,那么您可以簡(jiǎn)單地執(zhí)行dataBlock.FSEntity.
//Parent struct:
type FSEntity struct {
guid string
}
//Child struct:
type DataBlock struct {
FSEntity
data []byte
}
func main() {
myVar := DataBlock{}
myVar.guid = "test"
myVar.data = []byte("moar test")
a(myVar.FSEntity)
}
func a(x FSEntity) {
fmt.Printf("%+v\n", x)
}
- 3 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)