1. 程式人生 > >golang channel基本操作

golang channel基本操作

channel可以實現執行緒的阻塞。

//建立無緩衝區channel,只能存放一個值。
var ch = make(chan int)
//建立有緩衝區channel,可以存放多個值,值到達上限才會阻塞。
var ch1 = make(chan int,3)
//賦值
ch<-555
//取值
<-ch
//關閉chnneal,關閉後無法在使用
close(ch)
//判斷channel是否關閉
if num,ok:=<-ch;ok==true{
 //channel為關閉        
}
//遍歷channel
for num:=range ch1{
  fmt.Println(num)  
}
//定義單向只讀channel
var wrieteCh chan<-int
//定義單向可寫channel
var readCh<-chan int
//雙向channel轉換為單向
var writeCh chan<- int =ch
var readCh <-chan int =ch

 單向channel栗子

import (
	"fmt"
)

func producer(out chan<- int) {
	for i := 0; i < 10; i++ {
		out <- i * i
	}
	close(out)
}

func consumer(in <-chan int) {
	for num := range in {
		fmt.Println("num=", num)
	}
}
func main() {
	var ch1 chan int
	ch := make(chan int)
	go producer(ch) 
	consumer(ch)
}

栗子

func main() {
	ch := make(chan string)
	go func() {
		for i := 0; i < 2; i++ {
			fmt.Println(i)
			time.Sleep(time.Second)
		}
		ch <- "執行完畢"
	}()
        str:= <-ch
        fmt.Println(str)
}