2014-02-07 44 views
1

在此處轉到新手。我有兩個結構,父母和孩子。子項包含Parent作爲匿名字段。我想知道如何將該結構傳遞給期望Parent的函數(並且對Child沒有任何意見)。這裏的代碼說明了我想做的事:在Go中傳遞帶有匿名字段的struct

package main 

import "fmt" 

type Parent struct { 
    Dad string 
} 

type Child struct { 
    Parent 
    Son string 
} 

func myfunc(data Parent) { 
    fmt.Printf("Dad is %s\n", data.Dad) 
} 

func main() { 
    var data Child 
    data.Dad = "pappy" 
    data.Son = "sonny" 
    myfunc(data) 
} 

什麼MYFUNC的魔力聲明()來得到這個工作?

回答

3

您的代碼works on the Go playground如果你只是改變了第二至最後一行:

myfunc(data.Parent) 

你不應該期望能夠使它工作僅僅是改變myfunc因爲你說myfunc無法知道任何有關Child類。

+0

非常好,謝謝。我無法在文檔或其他地方找到任何有關此事的討論。 –

+1

作爲參數傳遞給函數的對象的類型只是匹配它期望的對象的類型。如果期望Parent並且你傳遞了Child,那麼絕大多數嚴格類型的語言沒有辦法處理它,你不應該期望它能夠工作。那麼這個問題就變成了「我如何讓父母離開孩子」,並且我只是猜測一下就知道了。 –