Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menambah dengan Betul pada Slice dalam Go Struct?

Bagaimana untuk Menambah dengan Betul pada Slice dalam Go Struct?

Susan Sarandon
Susan Sarandonasal
2024-12-13 01:29:14203semak imbas

How to Correctly Append to a Slice within a Go Struct?

Go - Menambah pada Slice dalam Struct

Dalam Go, menambahkan hirisan dalam struct memerlukan perhatian yang teliti terhadap rujukan berubah-ubah. Ini boleh menjadi mengelirukan apabila bekerja dengan kepingan dalam struct, terutamanya apabila kaedah menerima struct ialah penerima penunjuk.

Masalah

Pertimbangkan kod berikut:

package main

import "fmt"

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

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

func main() {
    item1 := MyBoxItem{Name: "Test Item 1"}
    box := MyBox{[]MyBoxItem{}} // Initialize box with an empty slice

    AddItem(box, item1)  // This is where the problem arises

    fmt.Println(len(box.Items))
}

Isu timbul dalam panggilan ke kaedah AddItem. Apabila memanggil kaedah sebagai AddItem(box, item1), bukannya box.AddItem(item1), salinan baharu bagi struct box dibuat dan bukannya mengubah suai yang asal.

Penyelesaian

Untuk menyelesaikan masalah ini, tetapkan hasil kaedah AddItem kembali ke kepingan asal dalam struct:

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

Dengan melakukan ini, perubahan yang dibuat pada kepingan dalam kaedah AddItem ditunjukkan dalam medan kepingan asal struct.

Fungsi Utama yang disemak

Dengan kaedah AddItem yang dikemas kini, fungsi utama yang diperbetulkan seharusnya jadi:

func main() {
    item1 := MyBoxItem{Name: "Test Item 1"}
    box := MyBox{[]MyBoxItem{}}

    box.AddItem(item1)  // Call the method correctly

    fmt.Println(len(box.Items))
}

Kini, output akan mencetak dengan betul panjang kepingan Item, yang sepatutnya 1 selepas menambah item.

Atas ialah kandungan terperinci Bagaimana untuk Menambah dengan Betul pada Slice dalam Go Struct?. 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