首页 > 其他分享 >go1.21循环中的变量有变化

go1.21循环中的变量有变化

时间:2023-08-11 15:36:52浏览次数:40  
标签:int32 变量 go1.21 45 循环 func time go

最近发了go1.21.0, 听说循环中的变量有变化,跑一下看看。
1.21.0默认还是和之前一样的。通过设置 go env -w GOEXPERIMENT=loopvar 让新语义生效

package main

import (
	"fmt"
	"sync/atomic"
	"time"
)

func main() {
	var is []int32
	for i := int32(0); i < 10; i++ {
		is = append(is, i)
	}

	var kk atomic.Int32
	c := int32(0)
	for _, i2 := range is {
		c += i2
		go func() {
			time.Sleep(time.Millisecond * 50)
			kk.Add(i2)  // goland提醒:Loop variables captured by 'func' literals in 'go' statements might have unexpected values 
		}()
	}
	// 就不用WaitGroup了
	time.Sleep(time.Second * 3)
	fmt.Println(kk.Load(), c)  // 不启用GOEXPERIMENT=loopvar打印90,45 ,否则打印45,45
}

标签:int32,变量,go1.21,45,循环,func,time,go
From: https://www.cnblogs.com/xiaotushaoxia/p/17623103.html

相关文章

  • Shell编程规范与变量二
    目录1.条件测试1.1文件测试1.2数字测试1.3字符串测试1.4逻辑测试1.5双中括号1.6(){}1.7if语句1.7.1单分支1.7.2双分支1.7.3多分支1.8case命令1.9echo命令2.使用shell脚本编译安装nginx1.条件测试条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达......
  • 异步线程变量传递必知必会---InheritableThreadLocal及底层原理分析
    InheritableThreadLocal简介笑傲菌:多线程热知识(一):ThreadLocal简介及底层原理3赞同·0评论文章上一篇文章我们聊到了ThreadLocal的作用机理,但是在文章的末尾,我提到了一个问题,ThreadLocal无法实现异步线程变量的传递。什么意思呢?以下面的代码为例子:@SneakyThrowspublicBo......
  • 【C语言基础语法】2. 变量和数据类型
    目录一、变量和常量 1.1关键字 1.2数据类型 1.3变量名命名二、进制三、整型 3.1整型的输出 3.2整型的输入 3.3整型的分类四、字符 4.1字符的输出 4.2字符的输入 4.3ascill码表 4.4转义字符五、浮点型六、类型限定符七、格式化 7.1格式化输出 7.......
  • TaskDecorator——异步多线程中传递上下文等变量
    目录TaskDecorator定义TaskDecorator实例线程池使用TaskDecorator开发中很多数据如oauth2的认证信息,日志TracerId都是在请求线程中的,如果内部使用多线程处理就存在获取不到认证信息或TraceId的问题。这时候就需要处理子线程与主线程间数据传递的问题。TaskDecorator这个......
  • 注释、变量
    python中的注释有2种1、单行注释单行注释用##这是一个单行注释快捷键用Ctrl+/全选多个内容可以多行快速注释,也可以快速去掉注释符#比如 2、多行注释用以三个双引号"""开头,再以3个双引号结尾""""""上面这个是开头2组符号中间的所有位置是多行注释下面这个是结尾"""......
  • Java 数据类型和变量的完整指南
    目录一、字面常量1.1什么常量?1.2常见的六种常量类型二、数据类型2.1什么是数据类型?2.2基本数据类型:2.3引用数据类型三、变量3.1什么是变量?3.2变量的命名规则3.3变量的作用域3.4变量的被final修饰四.类型转换4.1什么是类型转换?4.2自动类型转换4.3强制类型转换4.4注意事项4.5类型提升......
  • C/C++开发者必备 如何获取系统环境变量的方法
    获取系统环境变量在C/C++中是一项简单的任务。下面展示了一个纯C语言实现的方法。```c#include<stdio.h>#include<stdlib.h>intmain(void){char*pathVar;pathVar=getenv("PATH");printf("pathVar=%s",pathVar);return0;}```需要注意的是,`getenv()`函数定义......
  • 【Linux】进程优先级 | 进程的切换 | 环境变量详解
      ......
  • Flutter实现将变量保存到本地,之后调用它
    1、首先,在pubspec.yaml文件中添加shared_preferences依赖:dependencies:flutter:sdk:fluttershared_preferences:^2.0.9这里的版本你需要自己到官网选择下载:Dartpackage2、运行flutterpubget命令来获取依赖包。3、在需要保存变量的地方,导入相关库:import'package:fl......
  • Linux线程同步(条件变量)
    (文章目录)前言本篇文章来讲解一下条件变量的使用。一、条件变量概念条件变量(ConditionVariable)是并发编程中一种线程同步机制,用于实现线程之间的等待和通知机制。它是一种与特定条件相关的线程同步原语。条件变量用于线程间的协调,允许一个线程在满足某个特定条件之前等待,并......