3 回答
TA贡献1824条经验 获得超8个赞
嗯...这是人们在 Go 中附加到切片时最常见的错误。您必须将结果分配回切片。
func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
box.Items = append(box.Items, item)
return box.Items
}
此外,您已经定义AddItem了*MyBox类型,因此将此方法称为box.AddItem(item1)
TA贡献1872条经验 获得超3个赞
package main
import (
"fmt"
)
type MyBoxItem struct {
Name string
}
type MyBox struct {
Items []MyBoxItem
}
func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
box.Items = append(box.Items, item)
return box.Items
}
func main() {
item1 := MyBoxItem{Name: "Test Item 1"}
items := []MyBoxItem{}
box := MyBox{items}
box.AddItem(item1)
fmt.Println(len(box.Items))
}
输出:
1
TA贡献1786条经验 获得超11个赞
虽然这两个答案都很好。还有两个变化可以做,
摆脱 return 语句,因为该方法被调用以获取指向结构的指针,因此切片会自动修改。
无需初始化空切片并将其分配给结构
package main
import (
"fmt"
)
type MyBoxItem struct {
Name string
}
type MyBox struct {
Items []MyBoxItem
}
func (box *MyBox) AddItem(item MyBoxItem) {
box.Items = append(box.Items, item)
}
func main() {
item1 := MyBoxItem{Name: "Test Item 1"}
item2 := MyBoxItem{Name: "Test Item 2"}
box := MyBox{}
box.AddItem(item1)
box.AddItem(item2)
// checking the output
fmt.Println(len(box.Items))
fmt.Println(box.Items)
}
- 3 回答
- 0 关注
- 204 浏览
添加回答
举报