防止類型充當映射鍵
雖然某些類型本質上可以充當映射鍵,但開發人員可能希望阻止這種情況用法。雖然假設私人成員會禁止此類事件的發生,但事實證明這是不夠的。本文探討了渲染無法用作地圖鍵的類型的最佳方法。
比較地圖鍵類型
地圖類型的技術規格要求它們能夠透過 == 和 != 運算子進行比較。這意味著鍵類型不能是函數、映射或切片。利用此要求成為防止使用映射鍵的關鍵。
引入不可比較的字段
由其字段定義的結構體值只有在所有這些字段都可比較時才可比較。因此,引入不可比較類型的字段實際上使結構失去了充當映射鍵的資格。一個方便的選擇是添加切片類型的字段,因為它們被明確聲明為不可比較。
程式碼範例
考慮對提供的類型進行以下修改:
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
包含notComparable 欄位後,嘗試使用MyType 作為映射鍵將導致編譯時錯誤:
<code class="go">m := map[MyType]int{}</code>
編譯錯誤:「無效的映射鍵」 type MyType"
其他注意事項
值得注意的是,消除類型的映射鍵使用也消除了比較其值的選項。 。
以上是以下是一些標題選項,每個標題都強調文章的不同面向: 聚焦問題: * 如何防止類型被用作 Go 中的 Map Key? * 為什麼不能使用 MyStruct a的詳細內容。更多資訊請關注PHP中文網其他相關文章!