在 Go 中,映射可以將字串與自訂匿名結構關聯起來。此類映射的聲明可能會在 Gogland 等 IDE 中觸發「冗餘類型聲明」警告。這就提出了 struct{}{} 和 {} 宣告之間差異的問題。
語法解釋
struct{}{} 語法表示一個複合文字,包括類型 (struct{}) 和值 ({})。另一方面,{} 也是複合文字,但它省略了型別。
編譯器影響
一般來說,複合文字需要指定型別。但是,在宣告映射時,鍵和值的類型是從映射類型推斷出來的。因此,如果複合文字值與這些推斷類型匹配,則在分配複合文字值時可以省略類型。
根據複合文字規範,此異常是在 Go 1.5 中引入的。它消除了在某些情況下明確指定類型的需要,從而簡化了程式碼。
為了說明這一點,請考慮以下匿名結構體賦值:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland 可能會警告冗餘類型聲明。您可以使用以下語法來解決它:
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
此語法省略了類型 struct{},因為類型是從分配的值推斷出來的。
總而言之, struct{}{} 和 {} 的區別是前者在複合文字中明確包含類型,而後者則省略它,依賴於封閉映射聲明的類型推斷。
以上是Go 中的匿名結構:何時使用 `struct{}{} 與 {}`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!