在 Go 中,函數值是不可比較的。但是,可以比較函數值的位址,這在某些情況下很有用。
根據Go 規範,「函數值是不可比較的。」這表示您不能使用== 或!= 等比較運算子直接比較兩個函數值。
要比較函數值位址,您可以使用 fmt .sprintf()函數來取得函數位址。下面程式碼中的 p1 和 p2 變數分別包含 Undefined 和 hand.Get 函數的位址。
<code class="go">p1 := fmt.Sprintf("%v", Undefined) p2 := fmt.Sprintf("%v", hand.Get)</code>
然後可以使用== 運算子來比較函數值位址:
<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
雖然在技術上可以比較函數值地址,但這通常不是一個好的做法。函數值可能會在程式的生命週期內發生變化,這可能會使位址比較變得不可靠。
與其比較函數值位址,不如重構程式碼以避免進行此類比較。例如,您可以建立函數值映射並比較鍵以確定正在使用哪個函數。
比較函數值的另一個選項是使用反射。 Reflect.Value.Pointer() 方法可讓您取得函數值的位址。但是,也不建議這種方法,因為它比上述地址比較技術更複雜且更容易出錯。
以上是你能比較 Go 中的函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!