Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memulakan Potongan Penunjuk dengan Struktur Tanpa Nama di Golang?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 15:53:02931semak imbas

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>

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>

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>

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>

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>

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!

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