투케이2K

40. (Go Lang) [Mac Os] Go 문법 : Go 채널 (Channel) 사용해 Go 루틴 작업 수행 완료 확인 및 채널 응답 메시지 확인 본문

Go Lang (Go 언어)

40. (Go Lang) [Mac Os] Go 문법 : Go 채널 (Channel) 사용해 Go 루틴 작업 수행 완료 확인 및 채널 응답 메시지 확인

투케이2K 2024. 2. 22. 08:30

[개발 환경 설정]

개발 언어 : Go

 

[소스 코드]

package main

import "fmt"

func main() {

	// ---------------------------------------------------
	// [기본 설명]
	// ---------------------------------------------------
	// Go 채널은 그 채널을 통하여 데이타를 주고 받는 통로이며, 채널은 make() 함수를 통해 미리 생성되어야 합니다
	// ---------------------------------------------------
	// Go 채널은 주로 Go 루틴(go routine) 들 사이 데이터를 주고 받는데 사용되며, 상대편이 준비될 때까지 채널에서 대기함으로써 별도의 lock을 걸지 않고 데이터를 동기화하는데 사용됩니다
	// ---------------------------------------------------
	// Go 채널은 채널 연산자 <- 을 통해 데이터를 보내고 받습니다
	// ---------------------------------------------------
	// Go 채널은 수신자와 송신자가 서로를 기다리는 속성때문에, Go루틴이 끝날 때까지 기다리는 기능을 구현할 수 있습니다
	// ---------------------------------------------------
	// 익명함수를 사용한 한 Go 루틴에서 어떤 작업이 실행되고 있을 때, 메인루틴은 <-done 에서 계속 수신하며 대기하고 있습니다
	// ---------------------------------------------------

	// [Bool 형 채널을 생성]
	done := make(chan bool)

	go func() {
		for i := 0; i < 10; i++ {
			fmt.Println("for - ", i)
		}
		done <- true // 작업 완료 채널에 true 전달
	}()

	// [위의 Go루틴이 끝날 때까지 대기]
	<-done

	// [로그 출력]
	fmt.Println("")
	fmt.Println("----------------------------------------------")
	fmt.Println("[로그 출력 수행] : 채널 수신 완료")
	fmt.Println("----------------------------------------------")
	fmt.Println("")
}
 

[결과 출력]


반응형
Comments