類型func 與介面參數不相容:理解變異數
在Go 中,遇到「cannot use a (type func(int) ) as type myfunc in argument to b" 使用介面參數呼叫函數時出現的錯誤可能會令人困惑。這個問題的出現是由於類型系統中方差的概念。
Go 的介面不表現出方差,這意味著介面的行為不像其他程式語言那樣具有協變性。當類型 x 實作介面 ii 時,並不表示 func(x) 實作 func(ii)。
在提供的範例中,發生錯誤是因為 func(int) 與 func(interface{ }),儘管 int 可指派給介面{}。這種不相容性是由於 Go 中介面的行為不協變而引起的。
要解決此問題,您可以將func(int) 傳遞到需要interface{} 的函數中,如下例所示:
這是有效的,因為func (int)int 實作了interface{},有效地將類型「擴展」為更通用的介面類型。
有關進一步說明,請參閱提供的有關方差的維基百科文章以及探索各種程式語言(尤其是支援繼承的語言)中的變異數的連結部落格文章。
以上是為什麼我不能將 `func(int)` 傳遞給 Go 中需要 `func(interface{})` 的函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!