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