```go
func main(){
n := []int{1,2,3,4,2,3,4,2}
fmt.Println(n)
m := n
for k,v := range m{
if v == 2 {
m = append(m[:k],m[k+1:]...)
}
fmt.Println(k,"========",v,"--",m)
}
fmt.Println(n)
fmt.Println(m)
}
```
```想知道range工作原理,range m 与 for 循环的m是否是同一个m
```
<a href="/user/mlzhou" title="@mlzhou">@mlzhou</a> range 是没有出错,但是 append 切片时出错了,出错原因我知道,我想知道为什么改变切片对 for range 没有影响
#3
更多评论
你这个写法会崩的。
你对比for i:=0;i<len(m);i++{
} 这个写法就知道结果。
range只是让其迭代索引随机
range的值应该是m(i)
循环本身只有迭代值,先决条件已经形成。你m的长度少了一个,肯定出错。
#1
*** range *** 是没有出错,但是*** append *** 切片时出错了,出错原因我知道,我想知道为什么改变切片对 *** for range *** 没有影响
#2