반응형
go 1.22 에서 for loop의 변경 점이 몇 가지 있습니다.
for 사용시 for문에서 선언된 변수가 한번만 생성되어서 내부의 goroutine 사용시 마지막 변수가 나오는 문제점이 있었습니다.
이번 1.22에서는 매번 생성되므로 문제가 해결 됩니다.
샘플 코드
package main
import (
"fmt"
"sync"
)
func main() {
numbers := []any{1, 2, 3, 4, 5}
var wg sync.WaitGroup
for _, number := range numbers {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println(number)
}()
}
// // 1.22 이전 버전은 아래의 코드르 형태임
// var number any
// for _, number = range numbers {
// wg.Add(1)
// go func() {
// defer wg.Done()
// fmt.Println(number)
// }()
// }
wg.Wait()
fmt.Println("---------- App Done")
}
go 1.22 이전 버전
5
5
5
5
5
---------- App Done
go 1.22 버전
5
3
2
4
1
---------- App Done
이 문제는 너무 잘알려져 있어서 Codeium에서는 코드를 변경하라고 가이드를 제공합니다.
반응형
'Dev > Go' 카테고리의 다른 글
google Project IDX (0) | 2024.04.02 |
---|---|
golang sqlc query log print (0) | 2024.03.08 |
dotnet으로 Golang gin 로컬 개발(localhost) 인증서 만들기 (0) | 2024.01.11 |
Golang cross-compile windows, mac(darwin), linux (0) | 2023.12.18 |
go - package (0) | 2023.11.24 |