golang channel基本操作

2022-08-30 19:33:11 字數 846 閱讀 8166

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才會繼續下去,要不然就...