Go - tambahkan ke slice dalam struct
Dalam Go, apabila cuba menambah kepingan dalam struct, kesilapan yang paling biasa ialah gagal memberikan keputusan kembali kepada kepingan.
Pertimbangkan perkara berikut contoh:
type MyBoxItem struct { Name string } type MyBox struct { Items []MyBoxItem } func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { box.Items = append(box.Items, item) return box.Items }
Fungsi AddItem mengambil MyBoxItem dan menambahkannya pada kepingan Item dalam struct MyBox. Ia mengembalikan kepingan yang dikemas kini.
Kini, fungsi utama:
item1 := MyBoxItem{Name: "Test Item 1"} item2 := MyBoxItem{Name: "Test Item 2"} items := []MyBoxItem{} box := MyBox{items} AddItem(box, item1) // Attempt to add item without fixing assignment fmt.Println(len(box.Items))
Kod ini cuba memanggil kaedah AddItem pada struct kotak dan lulus item1. Walau bagaimanapun, ia gagal untuk memberikan hasil kembali ke kotak. Potongan item.
Untuk membetulkannya, kod harus diubah suai seperti berikut:
func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { box.Items = append(box.Items, item) return box.Items }
Selain itu, kerana fungsi AddItem ialah ditakrifkan untuk *jenis MyBox, ia harus dipanggil sebagai box.AddItem(item1).
Atas ialah kandungan terperinci Mengapa Penambahan pada Slice dalam Go Struct Tidak Berfungsi Tanpa Penugasan Semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!