English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 강의

Golang 제어문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 병행

Golang 예외(Error)

Golang 기타杂项

Go 언어 단방향 채널

알려지듯 통로는 병행 실행되는 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

단방향 통로 사용:단방향 통로는 프로그램의 유형 안전성을 제공하여 프로그램에서 발생하는 오류를 줄입니다. 또는, 데이터를 전송하거나 수신할 수 있는 통로를 만들고자 할 때 단방향 통로를 사용할 수도 있습니다.