go1.22 新特性(日常使用相关)

注:文章参考https://zhuanlan.zhihu.com/p/679475977

for循环

  1. 循环共享变量问题

Go在1.22版本之前,for 循环迭代器的变量是一个单一变量,使用不当,会导致意想不到的行为,可能会造成共享循环变量的问题。 如依旧要使用旧版本,可以主动配置 GOEXPERIMENT=loopvar

package main

import (
	"fmt"
	"time"
)

func main() {
	nums := []int{1, 2, 3, 4, 5}

	for _, v := range nums {
		go func() {
			fmt.Println(v)
		}()
	}
	time.Sleep(2 * time.Second)
}

同样的一段代码,在1.22之前打印出来的数据可能为 5 5 5 5 5 1.22版本打印出来可能为 1 2 3 4 5 (无序)

  1. 整数类型的范围进行循环迭代
package main

import "fmt"

func main() {
	for i := range 5 {
		fmt.Println(i)
	}
}

Math/Rand 版本 2

package main

import (
	"math/rand/v2"
)

func main() {
	rand.Intn(100)
}

切片拼接

package main

import (
	"fmt"
	"slices"
)

func main() {
	slice1 := []int{1, 2, 3, 4, 5}
	slice2 := []int{6, 7, 8, 9, 10}
	slice3 := []int{11, 12, 13, 14, 15}
	
	// 1.22之前
	merged := append(slice1, slice2...)
	merged = append(merged, slice3...)
	fmt.Println(merged)

	// 1.22版本
	merged2 := slices.Concat(slice1, slice2, slice3)
	fmt.Println(merged2)

}
posted @ 2024-03-03 10:21  元気田支店长  阅读(32)  评论(0编辑  收藏  举报