首頁 > 後端開發 > Golang > 為什麼 Go 在使用具有介面參數的函數時會出現方差錯誤?

為什麼 Go 在使用具有介面參數的函數時會出現方差錯誤?

Patricia Arquette
發布: 2024-12-29 18:06:17
原創
222 人瀏覽過

Why Does Go Give a Variance Error When Using Functions with Interface Parameters?

使用介面參數鍵入func:變異數錯誤解釋

在Go 中,嘗試呼叫作為參數傳遞給另一個期望的函數的函數interface{} 類型可能會導致「無法使用a (type func(int)) 作為b 參數中的myfunc 類型」錯誤。此錯誤的出現是由於 Go 介面缺乏方差支援。

變異數

變異數是指子類型在任何需要其父類型的地方使用的能力。在協變類型系統中,子類型可以在輸入和輸出位置取代超類型。另一方面,逆變允許超類型取代輸入位置中的子類型。

Go 介面

Go 介面不顯示變異數。這意味著雖然 int 可以傳遞給需要 interface{} 的函數,但 func(int) 和 func(interface{}) 則不然。

理解錯誤

在提供的範例中,func(int)int 未實作func(interface{})int因為:

  • func(int) 需要一個int 參數,而func(interface{}) 需要一個interface{} 參數。
  • func(int) 回傳一個int,而func (interface{}) 可以傳回實作的任何值interface{}.

要解決該錯誤,您可以將func(int) 傳遞到需要interface{}的函數中,如以下所示以下程式碼:

package main

import "fmt"

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

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

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

以上是為什麼 Go 在使用具有介面參數的函數時會出現方差錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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