首頁 > 後端開發 > Golang > 儘管 `int` 滿足 `interface{}`,為什麼 Go 不允許將 `func(int)` 傳遞給 `func(interface{})`?

儘管 `int` 滿足 `interface{}`,為什麼 Go 不允許將 `func(int)` 傳遞給 `func(interface{})`?

Barbara Streisand
發布: 2024-12-29 18:41:11
原創
605 人瀏覽過

Why Doesn't Go Allow Passing `func(int)` to `func(interface{})` Despite `int` Satisfying `interface{}`?

類型func 出現介面參數不相容錯誤

在Go 中,宣告一個型別函數來接受任何符合interface{} 的值來看起來很簡單。但是,呼叫作為遵循此類型規範的參數傳遞的函數會引發錯誤。

此錯誤源自於類型變異數的概念,特別是 Go 介面中缺乏協方差。雖然整數 (int) 可以傳遞給需要 interface{} 的函數,但同樣的原則不適用於函數。

具體來說,func(int) 和 func(interface{}) 不是相容的型別。儘管 int 符合 interface{},但 func(int) 不符合 func(interface{})。這是因為 Go 中的介面是不變的。

要解決此問題,請考慮將func(int) 傳遞給需要interface{} 的函數,如以下示例所示:

package main

import "fmt"

type myfunc interface{}

func foo(x interface{}) {
    fmt.Println("foo", x)
}

func add2(n int) int {
    return n + 2
}

func main() {
    foo(add2)
}
登入後複製

在這個例子中,func(int )int實作了interface{},從而避免了類型不相容的錯誤。

以上是儘管 `int` 滿足 `interface{}`,為什麼 Go 不允許將 `func(int)` 傳遞給 `func(interface{})`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板