Struktur Tanpa Nama dalam Go: Bilakah lebihan untuk Menentukan Jenis dalam `map[rentetan]struct{}`?

Susan Sarandon
Lepaskan: 2024-10-30 04:06:28
asal
279 orang telah melayarinya

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

Struktur Tanpa Nama: Mendedahkan Perbezaan antara struct{}{} dan {}

Dalam Go, mengisytiharkan peta struct rentetan kepada tanpa nama boleh dilakukan dalam dua cara:

<code class="go">var Foo = map[string]struct{}{
    "foo": struct{}{},
}</code>
Salin selepas log masuk
<code class="go">var Foo = map[string]struct{}{
    "foo": {},
}</code>
Salin selepas log masuk

Walaupun kedua-dua ungkapan sah, yang kedua menimbulkan amaran di Gogland mengenai "Pengisytiharan jenis berlebihan." Untuk menjelaskannya, mari kita terokai perbezaan asas antara kedua-dua bentuk ini.

Pertama, pertimbangkan perkara berikut:

<code class="go">struct{}{}</code>
Salin selepas log masuk

Ini ialah literal komposit yang terdiri daripada jenis (struct{}) dan nilai ({}). Sebaliknya, ini:

<code class="go">{}</code>
Salin selepas log masuk

Merupakan literal komposit yang meninggalkan jenis dan hanya mengekalkan nilai.

Biasanya, literal komposit memerlukan kemasukan spesifikasi jenis untuk membantu pengkompil dalam mengenal pasti jenis yang dimaksudkan. Mengikut spesifikasi bahasa:

CompositeLit = LiteralType LiteralValue .
Salin selepas log masuk

Walau bagaimanapun, apabila mentakrifkan literal komposit peta, jenis kunci dan nilai sudah ditentukan oleh jenis peta. Oleh itu, dalam kes di mana anda bercadang untuk memberikan nilai jenis yang ditentukan ini, spesifikasi jenis boleh ditinggalkan.

Peninggalan ini dibenarkan oleh spesifikasi Go, yang menyatakan:

"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."
Salin selepas log masuk

Sebagai kesimpulan , dua ungkapan yang dibentangkan pada permulaan mencapai hasil akhir yang sama. Walau bagaimanapun, yang kedua memanfaatkan ciri bahasa yang membenarkan peninggalan spesifikasi jenis berlebihan dalam literal komposit peta.

Atas ialah kandungan terperinci Struktur Tanpa Nama dalam Go: Bilakah lebihan untuk Menentukan Jenis dalam `map[rentetan]struct{}`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!