首頁 > 後端開發 > Golang > 主體

如果標準比較運算子不起作用,如何比較 Go 中的函數?

Mary-Kate Olsen
發布: 2024-10-31 07:27:01
原創
377 人瀏覽過

How can you compare functions in Go if standard comparison operators don't work?

比較 Go 中的函數

在 Go 中,使用標準比較運算子比較兩個函數值是不可行的。但是,還有其他方法可以檢查函數是否等效。

使用函數位址

函數值本身不具可比性。相反,您可以比較函數值的位址以確定它們是否引用相同的函數。要取得函數的位址,可以使用fmt 套件的Sprintf("%v") 函數:

<code class="go">hand := &Handler{Undefined, Defined}
p1 := fmt.Sprintf("%v", Undefined)
p2 := fmt.Sprintf("%v", hand.Get)

if p1 == p2 {
    // Undefined and hand.Get refer to the same function.
}</code>
登入後複製

使用Reflect.Value

另一種方法是使用reflect.Value型別取得底層函數指標。這正是 fmt 套件內部所做的:

<code class="go">value := reflect.ValueOf(Undefined)
ptr := value.Pointer()</code>
登入後複製

然後您可以比較 ptr 值以確定函數是否相等。

注意

但是,需要注意的是,比較函數位址並不是適用於所有場景的可靠方法。函數閉包和動態產生的函數即使執行相同的任務也可以有不同的位址。

因此,通常建議避免比較函數位址,而是考慮比較函數行為的替代方法,例如測試其輸入和輸出值。

以上是如果標準比較運算子不起作用,如何比較 Go 中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!