github.com/reapchain/go-reapchain@v0.2.15-0.20210609012950-9735c110c705/cmd/channel_sample/channel_sample.go (about)

     1  package main
     2  
     3  import "fmt"
     4  
     5  func sum(a, b int ) <-chan int{  // 함수의 리턴값은  int형 받기 전용 채널
     6  	out := make(chan int)
     7  	go func(){
     8  		out <- a + b
     9  		fmt.Printf("out=%x, %v\n", out, out )  //out 채널의 포인터만 출력 ?
    10  	}()
    11  	return out  // 채널 변수 자체 리턴
    12  }
    13  
    14  func main() {
    15  	c := sum(1,2) // 채널을 리턴값을 받아서 c에 대입
    16  	//c는 <-chan int : int형 받기 전용 채널
    17  	fmt.Println( <- c )  // 3 : 채널에서 값을 꺼냄
    18  
    19  	ch := make(chan string, 1) //size 1
    20  	sendChan(ch)
    21  	receiveChan(ch)
    22  }
    23  func sendChan(ch chan<-string){  //채널에 값을 주기
    24  	ch <- "Data"  // 채널의 buf에 [0]string 에 저장됨.
    25  	// x:= <-ch //에러
    26  
    27  }
    28  func receiveChan(ch <-chan string){  //<-채널,, 채널로 부터 값을 가져오기
    29  	data := <-ch
    30  	fmt.Println(data)
    31  }