首頁 > 後端開發 > Golang > 主體

Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?

Susan Sarandon
發布: 2024-10-30 04:06:28
原創
278 人瀏覽過

 Anonymous Struct in Go:  When is it Redundant to Specify the Type in `map[string]struct{}`?

匿名結構:揭示struct{}{} 和{} 之間的差異

在Go 中,宣告字串到匿名結構映射可以透過兩種方式完成:

<code class="go">var Foo = map[string]struct{}{
    "foo": struct{}{},
}</code>
登入後複製
<code class="go">var Foo = map[string]struct{}{
    "foo": {},
}</code>
登入後複製

雖然這兩個表達式都有效,但第二個表達式會在Gogland 中引發有關「冗餘類型聲明」的警告。為了澄清這一點,讓我們探討一下這兩種形式之間的根本差異。

首先,考慮以下內容:

<code class="go">struct{}{}</code>
登入後複製

這是一個由類型 (struct{}) 及其結構組成的複合文字價值 ({})。相較之下,以下:

<code class="go">{}</code>
登入後複製

是省略型別並僅保留數值的複合文字。

通常,複合文字需要包含類型規格以幫助編譯器識別他們的預期類型。根據語言規格:

CompositeLit = LiteralType LiteralValue .
登入後複製

但是,在定義對應複合文字時,鍵和值類型已由對應類型指定。因此,如果您打算提供這些指定類型的值,則可以省略類型規格。

這種省略受到 Go 規範的認可,其中規定:

"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."
登入後複製

結論,開頭提出的兩個表達式達到相同的最終結果。然而,後者利用了一種語言功能,允許在映射複合文字中省略冗餘類型規範。

以上是Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!