Rumah > pembangunan bahagian belakang > Golang > Mengapa Penambahan Slice dalam Go Struct Tidak Berterusan Tanpa Penugasan Semula?

Mengapa Penambahan Slice dalam Go Struct Tidak Berterusan Tanpa Penugasan Semula?

DDD
Lepaskan: 2024-12-16 11:36:18
asal
797 orang telah melayarinya

Why Doesn't Appending to a Slice in a Go Struct Persist Without Reassignment?

Go - Melampirkan pada Slice dalam Struct

In Go, hirisan ialah jenis rujukan, bermakna ia memegang rujukan kepada asas tatasusunan. Jika anda menambahkan elemen pada hirisan dalam struct dan tidak memberikan hasil kembali ke hirisan, perubahan tidak akan berterusan apabila fungsi kembali.

Pertimbangkan kod berikut:

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    return append(box.Items, item)
}
Salin selepas log masuk

Di sini, kaedah AddItem mengambil item dan menambahkannya pada kepingan item dalam struct kotak. Walau bagaimanapun, kaedah ini tidak memberikan hasil kembali kepada kepingan Item, yang bermaksud bahawa kepingan itu tidak akan diubah suai apabila kaedah itu kembali.

Untuk membetulkannya, anda perlu menetapkan hasil operasi tambah kembali kepada kepingan. Anda boleh melakukan ini dengan mengubah suai kaedah AddItem seperti berikut:

func (box *MyBox) AddItem(item MyBoxItem) {
    box.Items = append(box.Items, item)
}
Salin selepas log masuk

Sekarang, apabila anda memanggil kaedah AddItem, kepingan akan dikemas kini dalam struct. Anda boleh mengesahkan ini dengan memanggil fungsi len pada kepingan Item:

item1 := MyBoxItem{Name: "Test Item 1"}
item2 := MyBoxItem{Name: "Test Item 2"}

items := []MyBoxItem{}
box := MyBox{items}

box.AddItem(item1)

fmt.Println(len(box.Items)) // Output: 1
Salin selepas log masuk

Perhatikan bahawa kaedah AddItem ditakrifkan untuk *jenis MyBox, yang bermaksud anda mesti memanggilnya sebagai box.AddItem(item1) , menghantar penunjuk ke struct kotak sebagai hujah.

Atas ialah kandungan terperinci Mengapa Penambahan Slice dalam Go Struct Tidak Berterusan Tanpa Penugasan Semula?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan