Mengapa Saya Memerlukan Penerima Penunjuk untuk Mengeluarkan Elemen daripada Slice dalam Struct?

Barbara Streisand
Lepaskan: 2024-11-17 11:29:02
asal
976 orang telah melayarinya

Why Do I Need a Pointer Receiver to Remove an Element from a Slice in a Struct?

Mengalih keluar Elemen daripada Slice dalam Struct

Untuk mengalih keluar elemen daripada kepingan dalam struct, anda mesti menggunakan penerima penunjuk , bukannya penerima nilai. Penerima nilai mengubah suai salinan struktur asal, manakala penerima penuding mengubah suai struktur asal itu sendiri.

Contoh Kod

Pertimbangkan kod ini untuk mengalih keluar rakan daripada Struktur tetamu:

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
        }
    }
}
Salin selepas log masuk

Kod ini tidak akan berfungsi kerana ia menggunakan penerima nilai, (Tetamu sendiri). Untuk mengubah suai struktur asal, anda mesti menggunakan penerima penunjuk, (diri Tetamu)*.

Kod Betul

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
        }
    }
}
Salin selepas log masuk

Sekarang, memanggil guest1.removeFriend(3) akan mengalih keluar rakan dengan ID 3 daripada guest1 struct.

Nota:

Juga ambil perhatian bahawa menggunakan nama penerima seperti (diri) dan (ini) bukan idiomatik dalam Go. Sebaliknya, gunakan nama struct, seperti (tetamu).

Atas ialah kandungan terperinci Mengapa Saya Memerlukan Penerima Penunjuk untuk Mengeluarkan Elemen daripada Slice dalam Struct?. 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