1. 首页
  2. 会员
  3. bsdx866的信息
初级会员
  • 第 17953 位会员
  • bsdx866
  • 2018年04月19日 06:25:46
  • Offline
  • 46 38

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了面试题 Go每日一题(1)
    0 -> 3 1 -> 3 2 -> 3 3 -> 3 原因分析 在该程序中,存在对 range 和指针引用的理解误区。下面逐步解释为什么会出现这种结果: 1. slice 的遍历 ```go slice := []int{0, 1, 2, 3} 这是一个包含4个元素的切片:[0, 1, 2, 3]。 ``` 2. 遍历时将值的地址存入 map ```c for key, val := range slice { m[key] = &val } ``` 在这个循环中,val 是每次迭代时从 slice 中复制的一个副本。 &val 取的是变量 val 的地址。然而,由于 val 是一个局部变量,在整个循环过程中,它的地址始终是相同的(因为 Go 的 range 会复用同一个变量)。 所以,m[key] = &val 存储的是同一个地址,即指向最终的值 3(最后一次迭代的值)。 3. 最终输出结果 ```c for k, v := range m { fmt.Println(k, "->", *v) } ``` 因为所有的指针都指向了 val 的最终值 3,所以无论访问哪个键的值,都会显示 3。 解决方法 如果希望每个指针对应正确的值,可以修改代码如下: ```c for key, val := range slice { temp := val m[key] = &temp } ``` 这样,每次循环都会创建一个新的变量 temp,其地址不同且保存当前的 val 值,从而避免了所有指针指向同一个值的问题。 总结 问题本质:所有指针指向同一个变量 val 的地址。 解决方式:通过引入临时变量确保每个指针指向独立的值。 ```
  • 评论了面试题 Go每日一题(89)
    ![image.png](https://static.golangjob.cn/241014/786102babe29e92b81f28f078107d828.png)
  • 评论了面试题 Go每日一题(84)
    ![image.png](https://static.golangjob.cn/241009/df060e396c918ec70bba0cf1c05532da.png)
  • 无法访问 ![image.png](https://static.golangjob.cn/230904/63706f412b41c467b980d909e555a7fa.png)
  • 评论了面试题 Go每日一题(79)
    ![image.png](https://static.golangjob.cn/230717/d41cf4d5047c374987e8f9def988d75f.png)