初级会员
  • 第 80055 位会员
  • amocea
  • amocea
  • 2024-03-04 17:15:22
  • Offline
  • 24 8

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了面试题 Go每日一题(104)
    注意在 go1.22 for range 循环已经不是地址复用了,而是重新创建。
  • 评论了面试题 Go每日一题(102)
    第一次的 change() 里面传入的是 slice=[1,2,0,0,0],len = 5,cap = 5,尽管 append() 修改了底层数组,但是 len,cap 不变,所以 slice 仍然为 [1,2,0,00]; 第二次的 change() 里面传入的是 slice=[1,2,0,0,0],len = (2-0) = 2,cap = 5,所以 append() 的时候,尽管 len,cap 不变,但是 append() 修改的时 idx=2 时的元素,打印的是 slice,len = 5,所以最终输出的就是 [1,2,3,0,0] 注意:语法糖仍然是将数组传递进去,但是函数内部仍然会拷贝切片副本
  • 评论了面试题 Go每日一题(101)
    本来具备有疑惑:为什么 for range 循环拷贝的是 a 的副本,那什么修改a时会生效呢,自己认为 a 就是已经拷贝后的副本 答案:for range 拷贝的副本没有显式调用,也也就是其在 i,v 和遍历次数上做了一定的出口限制。所以导致 r 仍然是原值。 尽管其在内部对 a 进行了修改,但不会遍历到那些被修改后的数据。
  • 评论了面试题 Go每日一题(100)
    声明的函数变量是 nil,所以 defer f() 的时候,会报 panic:nil pointer;所以会执行第一个 defer,第一个 defer 当中,r += n,即 r= 3;后面 recover(),执行 return;且 n + 1不是命名的返回值参数,所以 r += (n + 1),即为 7
  • 评论了面试题 Go每日一题(99)
    for range 循环遍历时创建的是数据的副本,而不是创建引用,所以一个引用多个数据共用,起到地址复用的功能,且由于闭包保留的是引用,而在 go 中,for range循环没有函数调用的前提下是不会标记为可抢占的状态,所以 go func(){}都是在循环结束后执行。所以此时 i,v 都是处于最后的数据状态。因此输出 2,3