golang channel基本操作
阿新 • • 發佈:2018-12-04
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) }