上下文:我正在嘗試將類型轉換為類型,但遇到編譯錯誤。Go抱怨說類型轉換是不可能的,但沒有解釋為什么。最小重現如下所示:func(*interface{}) boolfunc(*string) bool法典:type strIterFn func(*string) boolfunc someFactory (_ []interface{}) func(*interface{}) bool { return func(_ *interface{}) bool { return true }}func main() { strs := []interface{}{"hello", "world"} strIterFn(someFactory(strs)) // --> this line fails to compile}游樂場: https://play.golang.org/p/oOSy50j_tKw
1 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
因為 Go 中沒有類型協方差。
在 Go 常見問題解答中,它解釋了:
Can I convert a []T to an []interface{}?不直接。語言規范不允許這樣做,因為這
兩種類型在內存中沒有相同的表示形式。必須將元素分別復制到目標切片。
這是對切片的解釋,但對于函數來說,這是相同的想法。
此外,我發現您的代碼示例很奇怪。你為什么需要?這是一個相當深奧的用例,需要一個指向接口的指針。*interface{}
也許這里正確的方法是重新設計?如果你能描述你試圖解決的實際問題,可能會有其他解決方案。
- 1 回答
- 0 關注
- 88 瀏覽