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

你能阻止一個類型在 Go 中被用作 Map Key 嗎?

Linda Hamilton
發布: 2024-10-27 09:06:30
原創
970 人瀏覽過

 Can You Prevent a Type from Being Used as a Map Key in Go?

防止類型用作映射鍵

雖然擁有可用作映射鍵的類型通常是有益的,但在某些情況下,可能有必要限制其使用。雖然假設類型中存在私有成員會阻止其在定義包之外用作映射鍵是一種常見的誤解,但實際上,它並沒有提供此類保護。

防止映射鍵使用的最佳方法

防止類型被用作映射鍵的最有效方法是違反映射類型規範,該規範要求鍵類型必須啟用以下定義:比較運算子(== 和!= )。透過在類型被認為不可比較的類型(例如切片或函數)中合併字段,您可以有效地禁止將其用作映射鍵。

考慮以下範例:

type MyType struct {
    S             string
    i             int
    notComparable []int
}
登入後複製

嘗試使用MyType 作為映射鍵:

m := map[MyType]int{}
登入後複製

會導致編譯時錯誤:

invalid map key type MyType
登入後複製

阻止映射鍵使用的後果

需要注意的是,透過採取這種措施,您將喪失使用比較運算子來比較您的類型的值的能力。例如,以下程式碼將不再起作用:

p1, p2 := MyType{}, MyType{}
fmt.Println(p1 == p2)
登入後複製

編譯時錯誤:

invalid operation: p1 == p2 (struct containing []int cannot be compared)
登入後複製

保留可比較

如果您如果希望保留類型的可比較性,同時防止將其用作映射鍵,則可以採用涉及嵌入和包裝類型的技術。例如:

type myType struct {
    S string
    i int
}

type MyType struct {
    myType
    notComparable []int
}
登入後複製

透過這種方法,myType 保持可比性,而導出的包裝類型 MyType 不能用作映射鍵。

以上是你能阻止一個類型在 Go 中被用作 Map Key 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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