我有一個返回匿名結構的函數。生成此函數,因此我無法更改代碼或為返回值創(chuàng)建類型。func foo() struct { Prop int} { result := new(struct { Prop int }) result.Prop = 1 return *result}在代碼庫的其他地方,我想定義一個函數,該函數接受返回類型的參數bar()foo()func bar(arg ReturnTypeOfFoo) { // ...}我可以在不手動定義類型的情況下執(zhí)行此操作嗎?我可以做某種反思嗎?ReturnTypeOfFoofoo()
2 回答

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
您可以使用與參數類型相同的匿名結構:bar()
func bar(arg struct {
Prop int
}) {
fmt.Printf("Received: %+v\n", arg)
}
則以下為有效代碼:
res := foo()
bar(res)
和輸出(在Go Playground上嘗試):
Received: {Prop:1}
這是可能的,因為如果所有參數都可分配給 的參數類型,并且 的匿名結構返回類型可分配給 的匿名結構參數,則調用是有效的。bar(res)bar()foo()bar()
如果你需要它是動態(tài)的(例如,結果類型在重新生成時可能會改變),你可以使用go/parser包來解析生成的源,并使用相同的參數類型生成,習慣上在運行時執(zhí)行。您應該使生成/更改的生成過程的這一部分,因此并且將保持同步。foo()bar()go generatefoofoobar

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
我可以在不手動定義 ReturnTypeOfFoo 類型的情況下執(zhí)行此操作嗎?
不,因為...
我可以在foo()上做一些反思嗎?
不。不能在編譯時使用反射。
- 2 回答
- 0 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消