golang附加到结构内部的切片

golang附加到结构内部的切片,go,Go,我试图理解如何在Go中操作数据结构,以及它指向指针(带有副本或引用)的方法 我的代码是在运动场上,这里: 我制作了一个结构的切片图,里面还有一个其他东西的切片 在这里: 我想在以后的程序中附加其他项。似乎我必须使用指针来解决这个问题,但我不知道如何解决 我的实体应该是这样的吗 type Entity struct { Base Item Others *[]Item } 如果是这样的话,我应该如何向它添加项目?像这样 *e1.Others = append(*e1.Othe

我试图理解如何在Go中操作数据结构,以及它指向指针(带有副本或引用)的方法

我的代码是在运动场上,这里:

我制作了一个结构的切片图,里面还有一个其他东西的切片

在这里:

我想在以后的程序中附加其他项。似乎我必须使用指针来解决这个问题,但我不知道如何解决

我的实体应该是这样的吗

type Entity struct {
    Base   Item
    Others *[]Item
}
如果是这样的话,我应该如何向它添加项目?像这样

*e1.Others = append(*e1.Others, Item{"B", "bbb"})

如果还有其他问题的空间。。。我也不清楚我是否“必须”这样做:
数据库[1]=[]实体{}
数据库[1]=append(数据库[1],e1)
之前,或者我可以在这种情况下追加。我在
e1.Others=[]项{}
上尝试了同样的方法,但没有产生相同的附加效果(我知道这是我的误解,不是Go的错)


提前感谢:)

在当前代码中,您有两个类型为
Entity
的对象。一个名为
e1
,另一个名为
数据库[1]
。这两个对象是完全独立的,因为它们是
struct
s。因此,当您更改其中一个时,不会影响另一个。(小的例外:对
项的一些更改将被共享,但不是全部。)

如果要先将实体添加到映射中,然后再对其进行修改,则应使用指针映射,
map[int][]*entity
。然后,您应该使用
e1:=&Entity{}
创建一个指向实体的指针,而不是
Entity{}
,然后程序将工作。对
e1.Others
的更改也会影响
数据库[1]。Others
,因为这两个变量现在指向同一个对象

但是,
print
语句将有所不同。它不会打印结构,而是只打印指针值。要解决此问题,请添加字符串方法:

func (e *Entity) String() string { return fmt.Sprint(*e) }
看,我也去掉了不必要的空切片。附加到
nil
切片完全可以


为了进一步阅读,我建议,这将回答您当前的问题。

非常感谢!你添加的链接也很有帮助:D
func (e *Entity) String() string { return fmt.Sprint(*e) }