Bagaimana untuk Memulakan Potongan Penunjuk dengan Struktur Tanpa Nama di Golang?

Mary-Kate Olsen
Lepaskan: 2024-11-01 15:53:02
asal
1003 orang telah melayarinya

How to Initialize Slices of Pointers with Anonymous Structs in Golang?

Memulakan Potongan Penunjuk dengan Struktur Tanpa Nama di Golang

Dalam coretan kod daripada Bab 7 GOPL (Seksyen 7.6), struct tanpa nama digunakan untuk memulakan sekeping penunjuk:

<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

Ini mungkin kelihatan mengelirukan kerana jenis Trek sudah ditakrifkan dan sintaks {1, 2} nampaknya memulakan struct baharu yang tidak dinamakan. Walau bagaimanapun, sintaks ini ialah pintasan yang digunakan untuk memulakan elemen jenis hirisan tanpa mentakrifkan struktur secara eksplisit.

Notasi "{}" pada asasnya bersamaan dengan:

<code class="go">type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}</code>
Salin selepas log masuk

Di mana nama jenis (Cth) ditinggalkan. Sintaks ini berfungsi walaupun semasa memulakan hirisan penunjuk:

<code class="go">c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}</code>
Salin selepas log masuk

Dalam kes ini, operator & digunakan secara automatik pada struct tanpa nama untuk mencipta penunjuk.

Walau bagaimanapun, cuba untuk memulakan kepingan penunjuk dengan rujukan kepada struct tanpa nama (tanpa & operator) akan mengakibatkan ralat sintaks:

<code class="go">f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!</code>
Salin selepas log masuk

Untuk memulakan sepotong penunjuk dengan struct tanpa nama, sama ada struct tanpa nama mesti ditukar kepada penuding, atau penuding boleh ditinggalkan sama sekali:

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}
// or with pointers...
g := []*struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>
Salin selepas log masuk

Di sini, struct tanpa nama dibenamkan dalam kepingan penunjuk tanpa memerlukan definisi jenis yang berasingan. Sintaks ini biasanya digunakan untuk memulakan struct tanpa nama dalam peta dan koleksi lain di Golang.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Potongan Penunjuk dengan Struktur Tanpa Nama di Golang?. 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