golang控制channel的出入口

2021-07-02 04:30:36 字數 856 閱讀 3712

我們常常使用channel來在多個goroutine之間做資料通訊,但是chan作為函式的入參我們應該怎麼寫呢?也許有人覺得這個問題比較傻,不過這個還真的是我今天才知道的.

首先我們看看下面的**:

func main() 

func in(c chan

int)

close(c)

fmt.println("int end")

}func out(c chan

int)

fmt.println("out end")

}

這個無非就是在in方法裡面給channel插入10個數字,然後在out方法裡面把這是個數字依次取出來(是的你沒看錯,range可以用於從channel中取值).

如果我想把out方法交給第三方去實現,但是我又需要輸出的的數字順序嚴格按照我的順序來,也就是說我需要顯式的規定out方法只能從channel中取值,不能給channel中賦值,這個時候我們應該按照下面的方式去寫

type channelfunces inte***ce
一旦在實現這個out方法的時候向chan裡面插入值的話,就會連編譯都不過(感嘆go男的嚴謹,大神的設計就是經典),從而我們可以通過方法的入參來限制通道的資料進出方向,那麼如果想限制chan只能插入不能讀出應該怎麼寫呢?

type channelfunces inte***ce
基於這種寫法我們可以在設計過程中來防止chan暴露出去資料的進出許可權無法控制,當然你在引數上面不寫」<-「的話,這個通道就是乙個全雙工的通道了,具體依據你需要編寫的業務來定,不過能限制的話盡量限制住,養成良好的編碼習慣,應該從這些細節開始.

golang開發 channel使用

channel主要是用於多個goroutine之間通訊 channel是引用型別,需要實用make來建立channel,如下 make chan type,buffer chan type 通道的型別 buffer 是可選引數,代表通道緩衝區的大小 省略則代表無緩衝 向channel裡面寫入資料使用...

golang開發 channel使用

channel主要是用於多個goroutine之間通訊 channel是引用型別,需要實用make來建立channel,如下 make chan type,buffer chan type 通道的型別 buffer 是可選引數,代表通道緩衝區的大小 省略則代表無緩衝 向channel裡面寫入資料使用...

golang中channel的用法

go語言的range迴圈可以直接在channels上面迭代。使用range迴圈一次從channel中接受資料,當channel被關閉並且沒有值可接受時跳出循壞。func main close natures go func close squares for x range squares 雙向ch...