Dalam Go, peta boleh mengaitkan rentetan dengan struct tanpa nama tersuai. Pengisytiharan peta sedemikian mungkin mencetuskan amaran "Pengisytiharan jenis berlebihan" dalam IDE seperti Gogland. Ini menimbulkan persoalan tentang perbezaan antara pengisytiharan struct{}{} dan {}.
Penjelasan Sintaks
Sintaks struct{}{} mewakili literal komposit yang termasuk kedua-dua jenis (struct{}) dan nilai ({}). Sebaliknya, {} juga ialah literal komposit, tetapi ia mengetepikan jenis.
Implikasi Pengkompil
Secara amnya, literal komposit memerlukan jenis yang ditentukan . Walau bagaimanapun, apabila mengisytiharkan peta, jenis kunci dan nilai disimpulkan daripada jenis peta. Oleh itu, anda boleh meninggalkan jenis apabila memberikan nilai tersurat komposit jika nilai tersebut sepadan dengan jenis tersimpul ini.
Pengecualian ini telah diperkenalkan dalam Go 1.5, mengikut spesifikasi untuk Huruf Komposit. Ia menghapuskan keperluan untuk menyatakan jenis secara eksplisit dalam situasi tertentu, memudahkan kod.
Untuk menggambarkan, pertimbangkan tugasan struktur tanpa nama berikut:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland mungkin memberi amaran tentang pengisytiharan jenis berlebihan. Anda boleh menyelesaikannya dengan menggunakan sintaks berikut:
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
Sintaks ini menghilangkan struktur jenis{} kerana jenis disimpulkan daripada nilai yang diberikan.
Ringkasnya, perbezaan antara struct{}{} dan {} ialah yang pertama secara eksplisit menyertakan jenis dalam literal komposit, manakala yang kedua meninggalkannya, bergantung pada jenis inferens pengisytiharan peta yang dilampirkan.
Atas ialah kandungan terperinci Struktur Tanpa Nama dalam Go: Bila hendak menggunakan `struct{}{} lwn. {}`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!