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
for num:=range ch1
//定義單向唯讀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)
close(out)
}func consumer(in <-chan int)
}func main()
栗子
func main()ch <- "執行完畢"
}()str:= <-ch
fmt.println(str)
}
深入學習golang channel
網路,併發 是go語言的兩大feature。go語言號稱 網際網路的c語言 與使用傳統的c語言相比,寫乙個server所使用的 更少,也更簡單。寫乙個server除了網路,另外就是併發,相對python等其它語言,go對併發支援使得它有更好的效能。goroutine和channel是go在 併發 方...
Golang channel 使用總結(一)
package main import fmt func main hbhly 56 128 demo go run g.go fatal error all goroutines are asleep deadlock goroutine 1 chan send main.main search ...
golang channel 管道 有無快取的區別
無緩衝的與有緩衝channel有著重大差別,那就是乙個是同步的 乙個是非同步的。比如c1 make chan int 無緩衝 c2 make chan int,1 有緩衝 c1 1 無緩衝 不僅僅是向 c1 通道放 1,而是一直要等有別的攜程 c1 接手了這個引數,那麼c1 1才會繼續下去,要不然就...