
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)
通过跟踪调试器中的代码,我可以看到当追加发生时,存储在“现有”变量中的分类法正在更新,但实际列表中的数据并未更新。
谁能告诉我哪里出错了?
由于精力有限,程序更新比较慢,请大家谅解,再次感谢支持taycms的朋友们,虽然比较慢,我们还是会一直更新下去的。谢谢您的关注。有什么建议可以到论坛提出,或者直接给我QQ留言。 2.0会有很多新功能,请关注官方论坛TayCMS 1.8 升级日志此版本修复了不少BUG1.更换图片切换JS , 不会再有错误提示2.增加资料下载模块3.更换默认模版,使程序功能和页面结构更清晰,方便参考制作模版4.修复留
正确答案
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) {
...








