2 回答
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
不!聲明通道與var創(chuàng)建通道不同。那么你應(yīng)該創(chuàng)建make:
var c chan string c = make(chan string)
不同之處在于,現(xiàn)在您可以在底層作用域中創(chuàng)建 c 并在它們之外使用它。
請(qǐng)注意,您不應(yīng)該以這種方式將冒號(hào)放在等號(hào)之前。
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
長(zhǎng)話短說(shuō)
沒(méi)辦法:你必須使用make.
更多細(xì)節(jié)
var c chan string
僅僅聲明了一個(gè)通道變量,但沒(méi)有初始化通道!這是有問(wèn)題的,因?yàn)檎缯Z(yǔ)言規(guī)范所說(shuō)
未初始化通道的值為
nil.
和
nil通道永遠(yuǎn)不會(huì)準(zhǔn)備好進(jìn)行通信。
換句話說(shuō),向nil通道發(fā)送和/或接收是阻塞的。盡管nil通道值可能很有用,但如果您想在通道上執(zhí)行通道通信(發(fā)送或接收),則必須在某個(gè)階段初始化通道。
正如 mkopriva 在他的評(píng)論中所寫(xiě),Go 只提供了一種初始化通道的方法:
可以使用內(nèi)置函數(shù)創(chuàng)建一個(gè)新的初始化通道值
make,該函數(shù)將通道類型和可選容量作為參數(shù):make(chan int, 100)
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)
