Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Struktur Tanpa Nama dalam Go: Bilakah lebihan untuk Menentukan Jenis dalam `map[rentetan]struct{}`?

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

Susan Sarandon
Susan Sarandonasal
2024-10-30 04:06:28257semak imbas

 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>
<code class="go">var Foo = map[string]struct{}{
    "foo": {},
}</code>

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>

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

<code class="go">{}</code>

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 .

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."

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!

Kenyataan:
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