下面这段代码很神奇

openset · · 799 次点击 · 开始浏览    置顶
谁能解释一下,这段代码运行既不报错,也不是死循环。 ```go m := map[int]string{ 1: "a", 2: "b", 3: "c", } for k, v := range m { m[k*k] = m[k] + m[k] fmt.Println("k: ", k, "\tv: ", v) } fmt.Println(m) ```
第 1 条附言  · 
```go m := map[int]string{ 1: "a", 2: "b", 3: "c", 4: "d", 5: "e", } for k, v := range m { m[k+5] = m[k] + m[k] fmt.Println("k: ", k, "\tv: ", v) } fmt.Println(m) ``` 运行输出结果: ``` k: 1 v: a k: 2 v: b k: 3 v: c k: 4 v: d k: 5 v: e k: 6 v: aa k: 7 v: bb k: 8 v: cc map[10:ee 11:aaaa 12:bbbb 1:a 2:b 6:aa 9:dd 8:cc 13:cccc 3:c 4:d 5:e 7:bb] ```
第 2 条附言  · 
下面2段代码输出结果一样: ```go s := []int{1, 2, 3} for i, v := range s { s = append(s, s[i]+3) fmt.Println("i: ", i, "\tv: ", v) } fmt.Println(s) ``` ```go s := make([]int, 3, 100) s[0], s[1], s[2] = 1, 2, 3 for i, v := range s { s = append(s, s[i]+3) fmt.Println("i: ", i, "\tv: ", v) } fmt.Println(s) ``` 运行输出结果: ``` i: 0 v: 1 i: 1 v: 2 i: 2 v: 3 [1 2 3 4 5 6] ```
第 3 条附言  · 
```go s := []int{1, 2, 3} for i, v := range s { s = s[0:2] fmt.Println("i: ", i, "\tv: ", v) } fmt.Println(s) ``` 运行输出结果: ``` i: 0 v: 1 i: 1 v: 2 i: 2 v: 3 [1 2] ```
799 次点击  ∙  1 赞  
加入收藏 微博
9 回复  |  直到 2019-01-16 09:36:54
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传