首頁 >後端開發 >Golang >如何比較 Go 中的函數?

如何比較 Go 中的函數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 17:58:03756瀏覽

How to Compare Functions in Go?

Go 中如何比較函數

簡介

Go 中,函數是可以引用的通過變數並作為參數傳遞給其他函數。然而,需要注意的是,Go 中的函數不能直接比較。這表示您不能使用標準比較運算子(==、!= 等)來確定兩個函數是否相等。

正確的比較方法

準確比較兩個函數的唯一方法是比較它們的位址。這是因為函數的位址唯一標識它。要取得函數的位址,可以使用:

  • fmt.Sprintf():此方法將函數位址列印到字串並將其儲存在變數中。
  • reflect.Value.Pointer():此方法傳回函數值的原始位址。

範例

考慮以下Go 程式碼:

<code class="go">type Action func(foo string)

var Undefined Action = func(foo string) {}
var Defined Action = func(foo string) {}

func compareFunctions() {
    if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Undefined) {
        fmt.Println("Undefined and Undefined are equal")
    } else {
        fmt.Println("Undefined and Undefined are not equal")
    }

    if fmt.Sprintf("%v", Defined) == fmt.Sprintf("%v", Defined) {
        fmt.Println("Defined and Defined are equal")
    } else {
        fmt.Println("Defined and Defined are not equal")
    }

    if fmt.Sprintf("%v", Undefined) == fmt.Sprintf("%v", Defined) {
        fmt.Println("Undefined and Defined are equal")
    } else {
        fmt.Println("Undefined and Defined are not equal")
    }
}</code>

執行此程式碼時,它會產生以下輸出:

Undefined and Undefined are equal
Defined and Defined are equal
Undefined and Defined are not equal

此輸出示範可以使用函數的位址進行比較且位址不同的兩個函數不相等。

結論

雖然 Go 中的函數值不能直接比較,但可以透過比較它們的位址來確定它們是否是相同的功能。透過上面的方法,你可以在Go中準確判斷兩個函數是否相等。

以上是如何比較 Go 中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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