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>
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>
Ini bersamaan dengan yang berikut:
<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
Dalam kes penunjuk, ia menjadi:
<code class="go">f := []*<type>{{...}, {...}}</code>
Yang bersamaan dengan:
<code class="go">f := []*<type>{&<type>{...}, &<type>{...}}</code>
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{&Ex{1, 2}, &Ex{3, 4}} d := []*Ex{{1, 2}, {3, 4}}</code>
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!