深入研究Go 中struct{}{} 和{} 之間的區別
Go 的匿名結構提供了一種表示簡單資料的便捷方法結構而不定義命名類型。然而,創建此類結構體的語法 struct{}{} 和 {} 可能會引發關於它們之間差異的問題。
在 Go 中宣告字串到匿名結構體的對應時,如下所示:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
IntelliJ Idea 可能會發出警告「冗餘類型聲明」。為了解決這個問題,可以使用以下程式碼:
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
兩種語法之間的區別在於編譯器如何處理不完整的匿名結構體文字。在第一個語法 struct{}{} 中,類型是明確指定的,即使它是匿名的。在第二種語法 {} 中,類型被完全省略。
根據 Go 語言規範,在映射類型的複合文字中,如果從映射類型已知鍵和值的類型本身,當打算指定這些類型的值時可以省略它們。這解釋了為什麼編譯器在這種情況下不需要 {} 的類型規格。
需要注意的是,由於疏忽,這種省略僅從 Go 1.5 開始有效。
以上是什麼時候可以在 Go Maps 中省略匿名結構的「struct{}{}」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!