首頁 >後端開發 >Golang >為什麼我不能將 `func(int)` 傳遞給 Go 中需要 `func(interface{})` 的函式?

為什麼我不能將 `func(int)` 傳遞給 Go 中需要 `func(interface{})` 的函式?

Susan Sarandon
Susan Sarandon原創
2024-12-23 16:09:12529瀏覽

Why Can't I Pass a `func(int)` to a Function Expecting `func(interface{})` in Go?

類型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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn