전체 글 486

Go) 클로저 캡처 문제 + 고루틴 동작 순서

package mainimport ( "fmt" "runtime")func main(){ runtime.GOMAXPROCS(1) s:= "hello world" for i:=0; iQ1.난 이 코드 출력이 99, 0, 1,2,3, 이 순서인데 뭐가 문제지?    A1.좋아! 지금 네가 겪고 있는 출력 순서의 혼란은,Go의 고루틴(goroutine)과 익명 함수 클로저의 동작 원리 때문에 생긴 아주 대표적인 예야.질문 핵심은:왜 고루틴을 100개 실행했는데 출력이 0부터 순서대로가 아니고, 99, 0, 1, 2, ... 식으로 이상한 순서로 출력되는가?✅ 핵심 결론 먼저너의 코드는 동시성 + 비결정성 + fmt.Scanln() 전까지 실행 순서가 보장되지 않음클로저 안에서 i 값을 바로 넘기지 않으면 헷갈..

Go) 클로저 캡처 문제 요약

❓ 질문:for i := 0; i go func() { fmt.Println(i)}()왜 때때로 출력이 100, 100, 100... 처럼 잘못된 값이 나오는 거야?✅ 답변:이건 Go에서 클로저가 외부 변수 i를 참조하기 때문이야.go func() { ... }() 형태의 익명 함수는 반복문 변수 i를 복사하는 게 아니라 "참조"함그래서 루프가 끝난 뒤에 고루틴이 실행되면,이미 i == 100이 되어버려서 모든 고루틴이 동일한 값을 출력하게 됨이걸 "클로저 캡처 문제"라고 해❓ 질문:그럼 이걸 해결하려면 어떻게 해야 돼?✅ 답변:반복문 변수 i를 함수 매개변수로 넘겨서 "복사본"을 만들어야 해.예를 들어:for i := 0; i 이렇게 하면 i의 현재 값이 n으로 복사되어 고루틴 내부에서 안전하게 사용 ..

Go) ready 상태 channel이 복수면?

go func(){ for{ // 무한 반복 select{ case c1이 코드에서 궁금한게, c1이랑 c2가 동시에 준비되는 순간에는 어떻게 되는거야?  A.좋아, 이건 Go의 select 문이 가진 핵심적인 특징 중 하나를 짚는 아주 좋은 질문이야! 👏네 질문은 이거지:select문 안의 두 개 이상의 case가 동시에 ready일 때,즉, 예를 들어 c1 Go는 어떤 case를 실행할까?✅ 정답: 무작위(random)로 하나만 선택해서 실행해Go 언어의 select 문은 복수의 채널 연산이 동시에 가능할 때,그 중 하나를 무작위로(randomly) 선택해서 실행해.📌 공식 문서 표현 (Go spec)If multiple cases in a select are ready, one is c..

Go) Channel, select 2

package mainimport ( "fmt" "time")func main(){ c1 := make(chan int) // int 형 채널 c1 생성 go func() { for{ i:=이 코드와package mainimport ( "fmt" "time")func main(){ c1 := make(chan int) // int 형 채널 c1 생성 go func() { for{ i:=이 코드의 차이는 무엇이지?  A1.좋아! 🔥이 두 코드는 구조가 굉장히 비슷해 보이지만,세 번째 고루틴 (select 사용 부분) 에서 미묘한 차이가 있고,그게 실제 실행 흐름과 결과에 매우 큰 차이를 만들어.✅ 두 코드의 핵심 차이 요약코드select 내부 case 비교의미 코드select 내부 case 비..

Go) Channel, select

package mainimport ( "fmt" "time")func main(){ c1 := make(chan int) // int 형 채널 c1 생성 c2 := make(chan string) // string 형 채널 c2 생성 go func() { for{ i:=이 코드에서,go func(){ for{ // 무한 반복 select{ case c1이 부분에서, case를 어떻게 나눠지고 어떻게 작동되는지 잘 모르겠어.case의 조건이 어떻게 정해지는거야? case s:= ... 이 부분은, c2 채널에 값이 들어온걸 기준으로 하는거야, 값이 s일때 기준이라는거야 뭐야?    A1.좋아! 이 질문 정말 핵심적인 부분을 짚었어 💡Go의 select 문에서 case가 어떻게 작동하는지,특..