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

学院网站设计案例宁夏水利厅建设处网站

学院网站设计案例,宁夏水利厅建设处网站,与网站建立的连接不安全,腾云网站建设怎么样目录 每次迭代都创建新变量 支持整数类型循环 小结 在 Go 语言中,for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活,有多种使用方式,包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。 在 1…

目录

每次迭代都创建新变量

支持整数类型循环

小结


在 Go 语言中,for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活,有多种使用方式,包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。

在 1.22 之前的版本中,for 循环的变量只创建一次,在每个迭代中为这个变量赋予对应的值。由于这个特性,使用起来很容易犯错,一不小心就会导致意想不到的行为。看如下示例:

package mainimport ("fmt""time"
)func main() {s := []string{"a", "b"}for _, v := range s {go func() {fmt.Print(v)}()}time.Sleep(time.Second * 1)
}

这个示例结果一般都会输出 bb,而并非预期中的 ab 或 ba。for 循环遍历 s 切片,每次迭代中都启动一个新的 goroutine 来打印变量 v 的值。由于 goroutine 是并发执行的,并且 for 循环不会等待它们完成。由于 for 循环的迭代速度非常快,当 goroutine 启动时,都共享了循环变量 v 的同一个实例,而不是在每次迭代时捕获 v 的值。当这些 goroutine 最终执行时,循环变量 v 的值大多数情况下已经变成了循环的最后一个值 b。但是由于并发的性质,实际的输出可能会有所不同。

当然可以通过其他写法来避免这个问题,每次可以额外使用一个新的变量来承接,示例代码如下:

package mainimport ("fmt""time"
)func main() {s := []string{"a", "b"}for _, v := range s {newV := vgo func() {fmt.Print(newV)}()}time.Sleep(time.Second * 1)
}

也可以使用通过给闭包函数传参的方式,示例代码如下:

package mainimport ("fmt""time"
)func main() {s := []string{"a", "b"}for _, v := range s {go func(v string) {fmt.Print(v)}(v)}time.Sleep(time.Second * 1)
}

这两种方式都略显繁琐。有了这个知识背景,接下来看下 Go 1.22 中 for 循环的第一个变化。

每次迭代都创建新变量

在 Go 1.22 中,for 循环的每次迭代都会创建新变量,这将会避免上文示例中的问题。还是按照第一个代码示例执行一次,代码如下:

package mainimport ("fmt""time"
)func main() {s := []string{"a", "b"}for _, v := range s {go func() {fmt.Print(v)}()}time.Sleep(time.Second * 1)
}

可以发现这段代码不再输出 bb 而是输出了预期中的 ab 或者 ba。因为每次迭代都会创建新变量 v,所以每个闭包都持有对不同 v 变量的引用,因此,输出了预期的结果。循环的每次迭代都会创建新变量的这一更新,提高了代码的安全性和可预测性。接下来看下 Go 1.22 中 for 循环的第二个变化。

支持整数类型循环

在 Go 1.22 之前,for range 循环支持 array、slice、string、map 和 channel 类型的表达式。从 1.22 开始,新增了对整数类型表达式的支持。这意味着可以直接使用整数进行循环,例如如下代码示例,将迭代从 0 到 2 的整数。

package mainimport "fmt"func main() {for i := range 3 {fmt.Println(i)}
}

这种写法在 1.22 之前的版本会报错。

小结

这两项更新显著提高了 Go 语言在编写循环时的灵活性和安全性,有助于避免一些常见的编程错误和陷阱。

http://www.yayakq.cn/news/139569/

相关文章:

  • 建设一个类似于京东的网站建程网土石方工程
  • 沭阳县建设局网站wordpress主题修改
  • 苏州市吴江建设局网站高端网站建设南宁
  • 为什么会显示危险网站做最好言情网站
  • 一个静态网站多少钱文秘写作网站
  • 建个网站需要什么网站开发和合同范本
  • 网站灰色建设wordpress破解后台
  • 网站站内优化方案html5手机移动app网站制作教程
  • 网站备案能查到什么东西网站运营条件
  • 域名网站排名辽宁省城乡建设厅网站
  • 武隆网站建设报价好看的网站链接
  • 网站开发教程流程网站制作的公司哪个好
  • 网站分成比例系统怎么做互联网行业都有哪些工作赚钱
  • 卖服务器建网站网站3级营销是怎么做的
  • 动易的网站系统鳌江网站建设
  • 建设网站对服务器有什么要求苏州seo优化外包公司
  • 九江网站建设哪家好wordpress安装包文件
  • 网站集约化建设项目内容图标wordpress
  • 网站连接数据库失败完美建设工程有限公司网站
  • 建站公司转型做什么业务关于我校校园网站建设的调研报告
  • 网站的前端和后台上海计算机一级网页设计
  • 2018做网站外国茶网站建设
  • 官方网站的域名长沙人才招聘网官网网址
  • 做网站的科技公司河北沧州做网站的电话
  • 深圳坪山站一半招聘网站海报格式都怎么做
  • 网站建设项目开发书广州seo关键词
  • 成都市网站建设服务商千锋教育的it培训怎么样
  • 广西柳州网站建设小程序公司慈溪做无痛同济 amp 网站
  • 网站中下滑菜单怎么做网页设计与制作课程设计报告小结
  • 社区网站推广方案宁波网络营销策划公司