首頁  >  文章  >  後端開發  >  如何防止自訂類型被用作 Go 中的映射鍵?

如何防止自訂類型被用作 Go 中的映射鍵?

Linda Hamilton
Linda Hamilton原創
2024-10-26 07:04:02373瀏覽

How to Prevent Custom Types from Being Used as Map Keys in Go?

自訂類型的映射鍵限制

某些類型本質上不適合作為映射鍵,例如映射、切片和函數。但是,一些開發人員可能希望明確阻止將特定的自訂類型用作映射鍵。

最初,依賴類型中的私有成員似乎是一種解決方案,但這種方法是無效的。為了解決這個問題,我們需要一個更根本的、符合語言規範的解決方案。

禁止使用類型作為映射鍵的關鍵在於違反比較運算子的要求。根據規範,映射鍵類型必須具有完全定義的比較運算子 == 和 !=。因此,透過包含不可比較類型的字段,我們可以有效地使整個類型不可比較。

例如,考慮以下類型:

type MyType struct {
    A *A
    b b
    notComparable []int
}

新增欄位notComparable 與切片類型呈現整個 MyType 不可比較,從而阻止其用作映射鍵。這是因為切片無法進行比較。

m := map[MyType]int{} // Compile-time error: invalid map key type MyType

值得注意的是,引入不可比較字段可能會產生進一步的影響。例如,它將無法使用 == 和 != 等運算子來比較類型的值。但是,透過仔細設計類型,可以保留特定欄位的可比較性,同時仍防止該類型被用作映射鍵。

以上是如何防止自訂類型被用作 Go 中的映射鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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