-
[Golang] Go 의 range 와 channel 함께 사용하기Golang 2024. 6. 15. 17:58728x90반응형
- 목차
들어가며.
Go 언어는 channel 과 range 를 함께 사용하여 데이터를 효율적으로 처리할 수 있는 간단하고 강력한 메커니즘을 제공합니다.
특히, 고루틴(goroutine)과 함께 사용할 때 데이터의 동시성 처리를 쉽게 구현할 수 있습니다.
Channel.
Go 의 채널은 고루틴 간의 통신을 위한 도구로, 데이터를 전송하거나 수신할 때 사용됩니다.
주로 아래와 같은 방식으로 Channel 변수를 초기화할 수 있습니다.
ch := make(chan int)
Range.
range 는 슬라이스, 배열, 맵, 채널 등에서 데이터를 순회(iterate)하는 데 사용됩니다.
채널에서 range를 사용하면 채널이 닫힐 때까지 데이터를 자동으로 수신합니다.
golang 에서는 채널을 닫기 위한 close 함수가 built in function 으로 제공됩니다.
ch := make(chan int) close(ch)
Range + Channel 조합해보기.
range 키워드는 Complex 자료구조를 순회할 수 있으며, Channel 과 함께 사용되어 Channel 내부를 순회합니다.
하지만 Channel 은 그 특성 상 외부 goroutine 에서 데이터를 언제든지 추가하거나 소비할 수 있기 때문에 Unbounded Queue 의 형태로 존재합니다.
즉, Endless 형태도 데이터의 끝이 없는 구조이죠.
따라서 close(ch) 와 같이 Channel 의 끝을 명시해주지 않으면 range channel 의 반복문은 종료되지 않고 계속 실행됩니다.
아래의 예시는 int 타입의 chan 에 5개의 데이터를 추가하고, 10초 이후에 Channel 이 종료됩니다.
그리고 이 range chan 반복문은 종료되기까지의 10초간 실행됩니다.
package main import ( "fmt" "time" ) func main() { start := time.Now() ch := make(chan int) go func() { for i := 1; i <= 5; i++ { ch <- i } time.Sleep(10 * time.Second) close(ch) }() for val := range ch { fmt.Println(val) } fmt.Printf("just Finished. time consumed: %2.ds \n", int(time.Now().Sub(start).Seconds())) }
1 2 3 4 5 just Finished. time consumed: 10s
반응형'Golang' 카테고리의 다른 글
[Golang] go install 과 go get 의 차이 알아보기 (0) 2024.06.15 [Golang] time 패키지의 기본적인 사용법 알아보기 ( Now, LoadLocation ) (0) 2024.06.12 [Golang] encoding/json 패키지 알아보기 (0) 2024.06.12 [Go] regexp 패키지와 정규표현식 알아보기 (0) 2024.06.08 golang package 이해하기 (2) 2023.09.18