Rumah > pembangunan bahagian belakang > Golang > Lampirkan pada hirisan penunjuk

Lampirkan pada hirisan penunjuk

WBOY
Lepaskan: 2024-02-06 10:00:07
ke hadapan
1083 orang telah melayarinya

Lampirkan pada hirisan penunjuk

Kandungan soalan

go ialah bahasa pengaturcaraan pertama saya dan saya cuba mempelajari petunjuk dengan menulis program yang menyusun maklumat berdasarkan taksonomi. Saya mengalami kesukaran untuk memahami cara melampirkan pada kepingan penunjuk.

type list struct {
    taxonomies []taxonomy
}

func (l *list) add(t taxonomy) {
    var exists bool
    var existing *taxonomy
    for _, taxonomy := range l.taxonomies {
        if taxonomy.name == t.name {
            exists = true
            existing = &taxonomy
        }
    }
    if exists {
        for _, term := range t.data {
            termexists := false
            for _, existingterm := range existing.data {
                if existingterm.name == term.name {
                    termexists = true
                    break
                }
            }
            if termexists {
                continue
            }
            (*existing).data = append((*existing).data, term)
        }
    } else {
        l.taxonomies = append(l.taxonomies, t)
    }
}

type taxonomy struct {
    name string
    data []term
}

type term struct {
    name, link string
}
Salin selepas log masuk

Saya rasa masalahnya di bahagian bawah, baris ini:

(*existing).Data = append((*existing).Data, term)
Salin selepas log masuk

Dengan mengesan kod dalam penyahpepijat, saya dapat melihat bahawa apabila penambahan berlaku, taksonomi yang disimpan dalam pembolehubah "sedia ada" sedang dikemas kini, tetapi data dalam senarai sebenar tidak.

Boleh sesiapa beritahu saya di mana silap saya?


Jawapan betul


l.taxonomies[]taxonomy,因此 taxonomy 值将是该元素的副本,对该副本的更改不会反映在原始 list nilai.

Anda boleh beralih menggunakan indeks untuk mengelakkan penyalinan nilai

for i := range l.taxonomies {
    if l.taxonomies[i].name == t.name {
        exists = true
        existing = &l.taxonomies[i]
    }
}
Salin selepas log masuk

Walau bagaimanapun, masih boleh menyalin data yang dihantar ke kaedah seperti append. Sebaliknya, lebih baik menggunakan penunjuk sepanjang:

type List struct {
    Taxonomies []*Taxonomy
}

func (l *List) Add(t *Taxonomy) {
...
Salin selepas log masuk

Atas ialah kandungan terperinci Lampirkan pada hirisan penunjuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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