English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
알려지듯 통로는 병행 실행되는 go routine 간의 통신 매개체입니다. 따라서 서로에게 데이터를 전송하고 수신할 수 있습니다. 기본적으로 통로는 양방향입니다. 하지만 단방향 통로를 생성할 수도 있습니다. 데이터를 수신할 수 있는 통로나 데이터를 전송할 수 있는 통로는단방향 통로。단방향 통로는 make() 함수를 통해 생성할 수도 있습니다. 다음과 같이 합니다:
//데이터 수신 전용 c1:= make(<- chan bool) //데이터 전송 전용 c2:= make(chan<-bool)
단방향 통로 사용 예제1:
package main import "fmt" func main() { //데이터 수신 전용 mychanl1 := make(<-chan string) //데이터 전송 전용 mychanl2 := make(chan<- string) //통로의 타입을 표시 fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
출력:
<-chan string chan<- string
Go 언어에서 양방향 통로를 단방향 통로로 변환할 수 있습니다. 다시 말해, 양방향 통로를 단방향 수신이나 단방향 전송 통로로 변환할 수 있으며, 반대도 마찬가지입니다. 아래의 프로그램을 보면 됩니다:
package main import "fmt" func sending(s chan<- string) { s <- "w3codebox" } func main() { //양방향 통로 생성 mychanl := make(chan string) //여기서, sending() 함수는 양방향 통로를 단방향 통로로 변환합니다 go sending(mychanl) //여기서, 통로는 go routine 내부에서만 전송되고 go routine 외부에서는 양방향이므로 w를 출력합니다3codebox fmt.Println(<-mychanl) }
출력:
w3codebox
단방향 통로 사용:단방향 통로는 프로그램의 유형 안전성을 제공하여 프로그램에서 발생하는 오류를 줄입니다. 또는, 데이터를 전송하거나 수신할 수 있는 통로를 만들고자 할 때 단방향 통로를 사용할 수도 있습니다.