以下代碼可以正常作業
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"
}
uj5u.com熱心網友回復:
TL;博士
沒辦法:你必須使用make.
更多細節
var c chan string
只是宣告了一個通道變數,但沒有初始化通道!這是有問題的,因為正如語言規范所說
未初始化通道的值為
nil。
和
nil通道永遠不會為通信做好準備。
換句話說,向nil通道發送和/或接收是阻塞的。盡管nil通道值可能很有用,但如果您想在通道上執行通道通信(發送或接收),則必須在某個階段初始化通道。
正如 mkopriva 在他的評論中所寫,Go 只提供了一種初始化通道的方法:
可以使用內置函式創建一個新的初始化通道值
make,該函式將通道型別和可選容量作為引數:make(chan int, 100)
uj5u.com熱心網友回復:
不!宣告通道與var創建通道不同。然后你應該創建make:
var c chan string
c = make(chan string)
不同的是,現在您可以在底層范圍中制作 c 并在它們之外使用它。
請注意,您不應該以這種方式將冒號放在等號之前。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450157.html
