Bagaimanakah Go mengendalikan permulaan sepotong penunjuk dengan struct tanpa nama?

Barbara Streisand
Lepaskan: 2024-10-31 15:39:13
asal
371 orang telah melayarinya

How does Go handle the initialization of a slice of pointers with anonymous structs?

Memulakan Slice of Pointer dengan Struktur Tanpa Nama dalam Go

Dalam Bab 7.6 teks "Go Programming Language", permulaan sepotong penunjuk Track menggunakan struct tanpa nama (struktur tanpa definisi jenis eksplisit) boleh mengelirukan. Contoh berikut menggambarkan ini:

<code class="go">var tracks = []*Track{
    {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
    {"Go", "Moby", "Moby", 1992, length("3m37s")},
    {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
    {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
}</code>
Salin selepas log masuk

Sintaks untuk memulakan sekeping penunjuk menyerupai permulaan sekeping struct, dengan penambahan * sebelum jenis elemen. Walau bagaimanapun, di bawah hud, sintaks sebenarnya adalah pintasan untuk memulakan sepotong nilai dengan jenis yang ditentukan pada masa penyusunan.

<code class="go">f := []<type>{{...}, {...}}</code>
Salin selepas log masuk

Ini bersamaan dengan yang berikut:

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
Salin selepas log masuk

Dalam kes penunjuk, ia menjadi:

<code class="go">f := []*<type>{{...}, {...}}</code>
Salin selepas log masuk

Yang bersamaan dengan:

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>
Salin selepas log masuk

Ini bermakna sintaks struct tanpa nama ialah kemudahan untuk memulakan hirisan penunjuk.

Ini berlaku kerana pengkompil tidak boleh membuat kesimpulan jenis struct tanpa nama daripada penunjuk kepada struct.
<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Go mengendalikan permulaan sepotong penunjuk dengan struct tanpa nama?. 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!