```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
```
你可以做下面这个测试:
`````````````````````````
func testForRange() {
n := []int{1, 2, 3, 4, 2, 3, 4, 2}
fmt.Println(n)
m := n
fmt.Println("m cap:", cap(m), "len:", len(m))
for k, _ := range m {
m = append(m, 9)
fmt.Println("key:", k, "m cap:", cap(m), "len:", len(m))
}
fmt.Printf("0x%x--", &n[0])
fmt.Printf("0x%x", &m[0])
}
````````````````````````````
#7
更多评论
你这个写法会崩的。
你对比for i:=0;i<len(m);i++{
} 这个写法就知道结果。
range只是让其迭代索引随机
range的值应该是m(i)
循环本身只有迭代值,先决条件已经形成。你m的长度少了一个,肯定出错。
#1
*** range *** 是没有出错,但是*** append *** 切片时出错了,出错原因我知道,我想知道为什么改变切片对 *** for range *** 没有影响
#2