当前位置: 首页 > news >正文

单页网站快速收录汽配外贸怎么找客户

单页网站快速收录,汽配外贸怎么找客户,手机上如何做网站,400元做网站送网推for-range for-range其实是正常for循环的一种语法糖#xff0c;在go语言中可以遍历arr#xff0c;slice#xff0c;map和channel等数据结构#xff0c;但是在一些初学者使用for-range可能会遇见很多坑#xff0c;这篇文章会带你探索一下for-range中非常有趣的一些实现机制…for-range for-range其实是正常for循环的一种语法糖在go语言中可以遍历arrslicemap和channel等数据结构但是在一些初学者使用for-range可能会遇见很多坑这篇文章会带你探索一下for-range中非常有趣的一些实现机制。 for-range遍历数组和slice 先来看两道题目 从数组中遍历获取一个指针元素切片的集合 arr : [2]int{1, 2} res : []*int{} for _, v : range arr {res append(res, v) } //expect: 1 2 fmt.Println(*res[0],*res[1]) //but output: 2 2答案从程序中可以看出我们预期输出的为1、2但实际上却输出了2、2的答案。 在for-range遍历中append切片 v : []int{1, 2, 3} for i : range v {v append(v, i) }答案上面代码遍历是会停止的。 好了可能有些朋友看完上面两段代码的最终结果已经开始疑惑了接下来我们来看一下for-range对 数组和slice的处理方法。 // len_temp : len(range) // range_temp : range // for index_temp 0; index_temp len_temp; index_temp { // value_temp range_temp[index_temp] // index index_temp // value value_temp // original body // }看上面这段源代码我们可以看出for-range内部调用其实还是for循环初始化会拷贝待遍历的列表然后每次遍历的v都是对上面源码value_temp这同一个元素的赋值。 这就可以说明我们的题1中为什么输出的会是2、2对题1中v取地址,最终只会拿到一个地址实际地址value_temp而对应的值就是最后遍历的那个元素所附给v的值。 想得到预期值有两种方案 使用局部变量 for _, v : range arr {//局部变量v替换了v也可用别的局部变量名v : v res append(res, v) }直接索引获取原来的元素 //这种其实退化为for循环的简写 for k : range arr {res append(res, arr[k]) }题2也就很好说明了因为遍历次数在遍历前就已经确定下来了len_temp所以题2最终只会循环三次。 for-range遍历map 还是先看两道题目 对map遍历时删除这个元素下一次遍历还能遍历到吗 var m map[int]int{1: 1, 2: 2, 3: 3}var o sync.Once for i : range m {o.Do(func() {for _, key : range []int{1, 2, 3} {if key ! i {fmt.Printf(when iteration key %d, del key %d\n, i, key)delete(m, key)break}}})fmt.Printf(%d%d , i, m[i]) }答案如果删除的元素还没有被遍历到上边once.go函数内保证第一次执行时删除未遍历的一个元素那么后面就不会出现。因为我们都知道map在for-range遍历中是无序遍历的这是因为map底层数据结构就是一个链式hash表并且初始化的时候会随机一个遍历开始的位置所以如果还没被遍历到的元素已经被删除了那么后面也肯定不会再出现。 map遍历时新增的元素能被遍历到吗 var m map[int]int{1:1, 2:2, 3:3} for i, _ : range m {m[4] 4fmt.Printf(%d%d , i, m[i]) }答案输出中可能会有44原因是因为上一条题目中原因类似链式hash表随机遍历开始位置。 好了我们再来看一下golang中for-range对map的处理方法。 // The loop we generate: // var hiter map_iteration_struct // for mapiterinit(type, range, hiter); hiter.key ! nil; mapiternext(hiter) { // index_temp *hiter.key // value_temp *hiter.val // index index_temp // value value_temp // original body // }遍历map时没有指定循环次数循环体是和slice类似的。由于map底层实现与slice不同map底层使用hash表实现插入数据位置是随机的所以遍历过程中新插入的数据不能保证被遍历到。 for-range对channel遍历 for-range对channel的处理 // The loop we generate: // for { // index_temp, ok_temp -range // if !ok_temp { // break // } // index index_temp // original body // }channel遍历是依次从channel中读取数据读取前是不知道里面有多少个元素的。如果channel中没有元素则会阻塞等待如果channel已被关闭则会解除阻塞并退出循环。 注意 上述注释中index_temp实际上描述是有误的应该为value_temp因为index对于channel是没有意义的。使用for-range遍历channel时只能获取到一个返回值。
http://www.dnsts.com.cn/news/69937.html

相关文章:

  • 国外网站空间租用哪个好宜昌网站制作公司亿腾
  • 外国的网站 ftp优化搜狐的培训
  • 做网站什么类型好百度网站推广价格查询
  • 作风建设提升年活动网站国外的wordpress主题公园
  • 学院网站建设服务宗旨河南建设工程信息网 建议访问中项网
  • 展示网站模板下载长沙3合1网站建设公司
  • wordpress定义小工具栏长沙搜索排名优化公司
  • 房产公司网站建设中国万网域名注册官网
  • asp网站一打开就是download网站长尾关键词排名软件
  • 海口建网站 模板网站搭建工作室加盟
  • 网站制作需求链接买卖
  • 全景网站开发待遇工程网站模板
  • 类模板模板下载网站有哪些内容找公司做网站要注意什么
  • 建筑网站官网网络科技公司有什么职位
  • linux网站服务器配置东莞横沥理工学校
  • 合肥网站开发 合肥网站优化内蒙古自治区精神文明建设网站
  • 做网站优化两年遇到的SEO常态企业网络推广公司
  • 福州有网站开发的公司吗青岛注册公司网站
  • 网站备案时长国外ip代理
  • 教育考试类网站建设开发一个平台要多少钱
  • 英文版网站建设方案北京市建设监理协会网站
  • 网站建设技术工具wordpress私活
  • 提供网站设计服务商有的网站域名解析错误
  • 网站建站客户需求表单怎么利用网络挣钱
  • 水处理网站源码百度app下载官方免费下载安装
  • 电子商务网站建设流程怎挖掘网站关键词
  • 网站开发如何无感更新wordpress文体旋转
  • 成品网站nike源码免费企业网站开发需求详细文档
  • 中粮我买网是哪个公司做的网站wordpress显示自定义分类文章数量
  • 怎么做淘宝返利网站网页代码大全