首頁 >後端開發 >Golang >以下是一些標題選項,每個標題都強調文章的不同面向: 聚焦問題: * 如何防止類型被用作 Go 中的 Map Key? * 為什麼不能使用 MyStruct a

以下是一些標題選項,每個標題都強調文章的不同面向: 聚焦問題: * 如何防止類型被用作 Go 中的 Map Key? * 為什麼不能使用 MyStruct a

Barbara Streisand
Barbara Streisand原創
2024-10-26 04:25:31865瀏覽

Here are a few title options, each emphasizing a different aspect of the article:

Focusing on the Problem:

* How to Prevent a Type from Being Used as a Map Key in Go?
* Why Can't You Use MyStruct as a Map Key in Go?
* Go: Disabling Map Key Usage for a

防止類型充當映射鍵

雖然某些類型本質上可以充當映射鍵,但開發人員可能希望阻止這種情況用法。雖然假設私人成員會禁止此類事件的發生,但事實證明這是不夠的。本文探討了渲染無法用作地圖鍵的類型的最佳方法。

比較地圖鍵類型

地圖類型的技術規格要求它們能夠透過 == 和 != 運算子進行比較。這意味著鍵類型不能是函數、映射或切片。利用此要求成為防止使用映射鍵的關鍵。

引入不可比較的字段

由其字段定義的結構體值只有在所有這些字段都可比較時才可比較。因此,引入不可比較類型的字段實際上使結構失去了充當映射鍵的資格。一個方便的選擇是添加切片類型的字段,因為它們被明確聲明為不可比較。

程式碼範例

考慮對提供的類型進行以下修改:

<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中文網其他相關文章!

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