Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memulakan Secebis Penunjuk kepada Structs dalam Go: Pecahan Sintaks Struktur Tanpa Nama?

Bagaimana untuk Memulakan Secebis Penunjuk kepada Structs dalam Go: Pecahan Sintaks Struktur Tanpa Nama?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 13:15:06525semak imbas

How to Initialize a Slice of Pointers to Structs in Go: A Breakdown of Anonymous Struct Syntax?

Memulakan Slice of Pointers: Memahami Sintaks Struktur Tanpa Nama

Dalam Bab 7 GOPL, satu contoh diberikan untuk memulakan sepotong penunjuk kepada struct Track:

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")},
}

Untuk memahami sintaks, mari kita periksa kod berikut di mana kita mentakrifkan Ex struct tersuai dan memulakan kepingannya:

type Ex struct {
    A, B int
}

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}}
e := []*Ex{{1, 2}, &Ex{3, 4}}

Dalam kes a dan b, kita memulakan hirisan dengan contoh struct Ex menggunakan sintaks pintasan:

f := []<type>{{...}, {...}}

Ini bersamaan dengan:

f := []<type>{<type>{...}, <type>{...}}

Untuk kes c, d dan e, sintaks memerlukan penjelasan yang lebih sedikit. Permulaan:

f := []*<type>{{...}, {...}}

Adalah analog dengan:

f := []*<type>{&<type>{...}, &<type>{...}}

Dalam erti kata lain, pendakap kerinting mengikut jenis menentukan nilai untuk struktur jenis itu dan ampersand mencipta penunjuk kepada struct tersebut.

Akhir sekali, dalam kod berikut, kami menerima ralat sintaks:

f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!

Ini kerana pendakap kerinting mesti diikuti dengan nama jenis, bukan struct tanpa nama. Sintaks yang betul ialah:

f := []*Ex{&Ex{1, 2}, &Ex{3, 4}}

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Secebis Penunjuk kepada Structs dalam Go: Pecahan Sintaks Struktur Tanpa Nama?. 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