我想表達一個可以切片的功能。我認爲我可以做到這一點:其中some_other_fun(..)
本身需要一個interface{}
型使用任意切片的Express功能
func myFunc(list []interface{}) {
for _, i := range list {
...
some_other_fun(i)
...
}
}
。但是,這不起作用,因爲您無法通過[]DEFINITE_TYPE
作爲[]interface{}
。請參閱:https://golang.org/doc/faq#convert_slice_of_interface,其中指出[] interface {}的表示方式不同。這個答案總結了爲什麼,但關於指向接口而不是接口片的指針,但原因是一樣的:Why can't I assign a *Struct to an *Interface?。
上面的golang.org鏈接提供的建議建議從DEFINITE_TYPE
切片重建一個新的接口切片。然而,在我想調用這個函數的代碼中,這是不切實際的(這個函數本身只能縮寫9行代碼,但這9行很常見於我們的代碼中)。
在此我想調用的功能,我將傳遞一個[]*DEFINITE_TYPE
這是我的第一個想法會更容易抽象的每一種情況下,直到再次,我發現Why can't I assign a *Struct to an *Interface?(上面還掛)。此外,每次我想調用函數時,它都與DEFINITE_TYPE
不同,因此爲n個類型實現n個示例並不會節省我的任何代碼行或使我的代碼更清晰(完全相反!)。
令人沮喪的是,我無法做到這一點,因爲9行在我們的代碼中是慣用的,而且錯誤類型可能很容易引入錯誤。我真的缺少泛型。真的沒有辦法做到這一點?!