首頁 > 後端開發 > Golang > 主體

附加到指標切片

WBOY
發布: 2024-02-06 10:00:07
轉載
1052 人瀏覽過

附加到指標切片

問題內容

go 是我的第一種程式語言,我正在嘗試透過編寫一個根據分類法組織資訊的程式來學習指標。我在理解如何附加到指標切片時遇到一些困難。

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
}
登入後複製

我認為問題出在底部,這一行:

(*existing).Data = append((*existing).Data, term)
登入後複製

透過追蹤偵錯器中的程式碼,我可以看到當追加發生時,儲存在「現有」變數中的分類法正在更新,但實際清單中的資料並未更新。

誰能告訴我哪裡出錯了?


正確答案


l.taxonomies[]taxonomy,因此taxonomy 值將是該元素的副本,對該副本的變更不會反映在原始list 值中。

您可以使用索引進行迭代以避免複製值

for i := range l.taxonomies {
    if l.taxonomies[i].name == t.name {
        exists = true
        existing = &l.taxonomies[i]
    }
}
登入後複製

但是,仍然可以複製傳遞給 append 等方法的資料。相反,最好在整個過程中使用指標:

type List struct {
    Taxonomies []*Taxonomy
}

func (l *List) Add(t *Taxonomy) {
...
登入後複製

以上是附加到指標切片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!