Mengalih keluar Elemen daripada Slice dalam Struct
In Go, struct ialah agregat medan, yang boleh termasuk kepingan. Apabila kaedah cuba mengubah suai penerima (iaitu, struktur itu sendiri), ia mesti menggunakan penerima penuding untuk mengemas kini nilai asal dan bukannya membuat salinan.
Pertimbangkan kod berikut:
type Guest struct { id int name string surname string friends []int } func (self Guest) removeFriend(id int) { for i, other := range self.friends { if other == id { self.friends = append(self.friends[:i], self.friends[i+1:]...) break } } }
Kod ini mengalih keluar elemen daripada kepingan "rakan" dalam struct "Tetamu". Walau bagaimanapun, cubaan untuk mengalih keluar elemen daripada struct asal mengakibatkan menimpa elemen yang diingini dan mendarabkan elemen terakhir, seperti yang dilihat dalam contoh:
guest1.friends = [1, 2, 3, 4, 5] guest1.removeFriend(3) // Result: guest1.friends = [1, 2, 4, 5, 5]
Untuk membetulkan isu ini, anda mesti menggunakan penerima penuding:
func (self *Guest) removeFriend(id int) { // ... (Same implementation) }
Dengan menggunakan penerima penuding, anda menetapkan nilai kepingan baharu (dipulangkan dengan "tambah()") kepada medan "rakan" bagi struct asal "Tetamu", mengurangkan panjang hirisan sebanyak 1 dengan berkesan.
Selain itu, disyorkan untuk menggunakan nama penerima yang lebih idiomatik, seperti "tetamu" atau "g," dan bukannya "diri sendiri."
Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar Elemen daripada Slice dalam Struct in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!