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

Lampirkan pada hirisan penunjuk

WBOY
WBOYke hadapan
2024-02-06 10:00:071053semak imbas

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
}

Saya rasa masalahnya di bahagian bawah, baris ini:

(*existing).Data = append((*existing).Data, term)

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]
    }
}

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) {
...

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

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam