亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以不使用 make 函數創建頻道嗎?

我可以不使用 make 函數創建頻道嗎?

Go
MMMHUHU 2022-11-23 20:18:51
下面的代碼工作正常func main() {    c := make(chan string)    go subRountine(c)    fmt.Println(<-c)}func subRountine(c chan string) {    c <- "hello"}有沒有其他方法可以在沒有 make 功能的情況下創建頻道?像這樣,但這個示例不起作用func main() {    var c chan string    go subRountine(c)    fmt.Println(<-c)}func subRountine(c chan string) {    c <- "hello"}
查看完整描述

2 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

不!聲明通道與var創建通道不同。那么你應該創建make

  var c chan string
  c = make(chan string)

不同之處在于,現在您可以在底層作用域中創建 c 并在它們之外使用它。

請注意,您不應該以這種方式將冒號放在等號之前。


查看完整回答
反對 回復 2022-11-23
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

長話短說

沒辦法:你必須使用make.

更多細節

var c chan string

僅僅聲明了一個通道變量,但沒有初始化通道!這是有問題的,因為正如語言規范所說

未初始化通道的值為nil.

nil通道永遠不會準備好進行通信。

換句話說,向nil通道發送和/或接收是阻塞的。盡管nil通道值可能很有用,但如果您想在通道上執行通道通信(發送或接收),則必須在某個階段初始化通道。

正如 mkopriva 在他的評論中所寫,Go 只提供了一種初始化通道的方法:

可以使用內置函數創建一個新的初始化通道值make,該函數將通道類型和可選容量作為參數:

make(chan int, 100)


查看完整回答
反對 回復 2022-11-23
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號