면접시에 받았던 고루틴의 대한 질문 정리 + 알파, 이전에 보고 사용했던 내용인데.. 사용을 안하니 머리에서 빠르게 지워지네요 ㅠ
ci := make(chan int) // unbuffered channel of integers
cj := make(chan int, 0) // unbuffered channel of integers
cs := make(chan *os.File, 100) // buffered channel of pointers to Files
package main
import "fmt"
func main() {
intChan := make(chan int)
go func() {
defer close(intChan)
for i := 0; i < 5; i++ {
intChan <- i
}
}()
for {
n, ok := <-intChan
fmt.Printf("%v - %t\n", n, ok)
if !ok {
break
}
}
}
var wg sync.WaitGroup
wg.Add(3) // 작업 개수 설정
wg.Done() // 작업이 완료될 때마다 호출
wg.Wait() // 모든 작업이 완료될 때까지 대기
예제
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func sum() {
sum := 0
for i := 0; i < 1000; i++ {
sum += i * i
}
fmt.Println("다음숫자는 : ", sum)
wg.Done()
}
func main() {
wg.Add(5)
for i := 0; i < 5; i++ {
go sum()
}
wg.Wait()
}
위 코드에서 wg.Add(int)여기서 파라미터값이 생성하고자하는 루틴의 값과 같아야한다. 만약 "goroutine 수 > param"이면 param의 수 까지만 종료를 보장 받을수있다. 반대로 "goroutine 수 < param"이면 아래와 같은 error를 발생한다.