問題: 嘗試使用類型作為映射鍵會導致編譯時錯誤,儘管包含私有成員的類型。如何解決這個問題?
答案:
雖然防止類型被用作映射鍵本身可能沒有什麼好處,但在某些情況下需要採取這樣的行動。根據語言規範,映射鍵必須遵守一定的比較規則。這裡有兩種防止類型被用作映射鍵的方法:
方法1:嵌入不可比較的字段
最簡單的解決方案是嵌入一個字段在類型不可比較的類型內,例如切片、映射或函數。這違反了映射鍵的比較運算子要求,導致類型不合適。例如:
<code class="go">type MyType struct { S string i int notComparable []int }</code>
方法 2:使用包裝類型
或者,可以建立一個包裝類型,嵌入原始類型並添加不可比較的類型場地。此包裝類型可以在其他地方使用,而原始類型保留其可比較性。例如:
<code class="go">type myType struct { S string i int } type MyType struct { myType notComparable []int }</code>
注意:
必須考慮防止類型用作映射鍵的潛在影響。對於 Embedd Non-Comparable Field 方法,它引入了一個不可比較字段,這可能會對涉及類型的比較操作產生連鎖反應。
以上是如何防止類型被用作 Go 中的映射鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!