3 回答

TA貢獻2051條經驗 獲得超10個贊
a := make(chan int)創建無緩沖通道。那個緩沖區為零的通道。您可以通過它發送數據。
var a chan int創建通道變量并將其設置為默認值nil。一個nil通道總是阻塞的,這就是你的程序陷入僵局的原因。您不能在nil通道中發送數據。
如果打印這些值,您將看到差異。
package main
import (
"fmt"
)
func main() {
var i chan int
fmt.Println(i)
a := make(chan int)
fmt.Println(a)
}
去游樂場鏈接:https://play.golang.org/p/Bxr6qRfNqZd

TA貢獻1864條經驗 獲得超6個贊
回想一下,var name type
創建一個名為name
type 的變量type
設置為該類型的默認值。這意味著var a chan int
創建一個通道,使得a == nil
.
var a chan int = make(chan int)
但是a := make(chan int)
,它們是相同的。

TA貢獻1829條經驗 獲得超7個贊
var x chan int
只是 'x' 的聲明,您只在堆棧中創建一個 val,而在堆中沒有實際的內存 malloc。但是,
var x chan int x = make(chan int, 0)
這種方式實際上可以為這個 x 在堆中 malloc 一些內存。
順便說一句,無論是在堆棧中還是在堆中構建的 val 在 golang 中都模糊不清。像map,slice,chan類型的引用類型,make()
在使用前都應該使用,否則會panic為nil point error
- 3 回答
- 0 關注
- 179 瀏覽
添加回答
舉報