1 回答
TA贡献1843条经验 获得超7个赞
您不将结果存储append()
在“原始”中slice
,因为您使用短变量声明而不是赋值:
slice := append(slice, i)
短变量声明(因为它与原始slice变量位于不同的块中)创建一个新变量(隐藏外部slice),并在循环内打印这个新变量。因此,每次追加的结果仅在循环体内可见,并在迭代结束时丢失。而是使用赋值:
slice = append(slice, i)
但是,当您这样做时,您将得到一个无限循环,因为您的循环条件是i < len(slice),并且slice在每次迭代中都会增长。
相反,你应该这样做(评估len(slice)一次并存储它):
for i, length := 0, len(slice); i < length; i++ {
slice = append(slice, i)
fmt.Println(slice)
}
输出将是(在Go Playground上尝试):
[5 4 3 2 1 0]
[5 4 3 2 1 0 1]
[5 4 3 2 1 0 1 2]
[5 4 3 2 1 0 1 2 3]
[5 4 3 2 1 0 1 2 3 4]
[5 4 3 2 1 0 1 2 3 4]
请注意,如果使用 ,您将得到相同的结果for range,因为它只计算切片一次:
for i := range slice {
slice = append(slice, i)
fmt.Println(slice)
}
在Go Playground上试试这个。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报