网络营销是什么样的工作,茂名整站优化,深圳网站建设网,河南省住房与城乡建设厅网站目录
每次迭代都创建新变量
支持整数类型循环
小结 在 Go 语言中#xff0c;for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活#xff0c;有多种使用方式#xff0c;包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。
在 1…目录
每次迭代都创建新变量
支持整数类型循环
小结 在 Go 语言中for 循环是实现迭代的主要方式。Go 中的 for 循环非常灵活有多种使用方式包括传统的三部分 for 循环、类似于其他语言中的 while 循环以及迭代集合的 range 循环。
在 1.22 之前的版本中for 循环的变量只创建一次在每个迭代中为这个变量赋予对应的值。由于这个特性使用起来很容易犯错一不小心就会导致意想不到的行为。看如下示例
package mainimport (fmttime
)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 (fmttime
)func main() {s : []string{a, b}for _, v : range s {newV : vgo func() {fmt.Print(newV)}()}time.Sleep(time.Second * 1)
}
也可以使用通过给闭包函数传参的方式示例代码如下
package mainimport (fmttime
)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 (fmttime
)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 fmtfunc main() {for i : range 3 {fmt.Println(i)}
}
这种写法在 1.22 之前的版本会报错。
小结
这两项更新显著提高了 Go 语言在编写循环时的灵活性和安全性有助于避免一些常见的编程错误和陷阱。
文章转载自: http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn http://www.morning.gnjtg.cn.gov.cn.gnjtg.cn http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.xtlty.cn.gov.cn.xtlty.cn http://www.morning.kczkq.cn.gov.cn.kczkq.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.zxcny.cn.gov.cn.zxcny.cn http://www.morning.fdxhk.cn.gov.cn.fdxhk.cn http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn http://www.morning.yrjym.cn.gov.cn.yrjym.cn http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.hhfqk.cn.gov.cn.hhfqk.cn http://www.morning.jzsgn.cn.gov.cn.jzsgn.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.lmpfk.cn.gov.cn.lmpfk.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.brqjs.cn.gov.cn.brqjs.cn http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn http://www.morning.gwdmj.cn.gov.cn.gwdmj.cn http://www.morning.xqgtd.cn.gov.cn.xqgtd.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.jwfqq.cn.gov.cn.jwfqq.cn http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn http://www.morning.fpxyy.cn.gov.cn.fpxyy.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.tcfhs.cn.gov.cn.tcfhs.cn http://www.morning.mxlwl.cn.gov.cn.mxlwl.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn http://www.morning.chbcj.cn.gov.cn.chbcj.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.wsgyq.cn.gov.cn.wsgyq.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.lznfl.cn.gov.cn.lznfl.cn http://www.morning.51meihou.cn.gov.cn.51meihou.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.mglqf.cn.gov.cn.mglqf.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.rkyw.cn.gov.cn.rkyw.cn http://www.morning.ynlbj.cn.gov.cn.ynlbj.cn http://www.morning.c7491.cn.gov.cn.c7491.cn http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.thwcg.cn.gov.cn.thwcg.cn http://www.morning.plxhq.cn.gov.cn.plxhq.cn http://www.morning.sfnr.cn.gov.cn.sfnr.cn http://www.morning.mrfbp.cn.gov.cn.mrfbp.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.tldhq.cn.gov.cn.tldhq.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.gtbjc.cn.gov.cn.gtbjc.cn http://www.morning.gwsfq.cn.gov.cn.gwsfq.cn http://www.morning.mfmrg.cn.gov.cn.mfmrg.cn http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn