3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
a := make(chan int)創(chuàng)建無緩沖通道。那個(gè)緩沖區(qū)為零的通道。您可以通過它發(fā)送數(shù)據(jù)。
var a chan int創(chuàng)建通道變量并將其設(shè)置為默認(rèn)值nil。一個(gè)nil通道總是阻塞的,這就是你的程序陷入僵局的原因。您不能在nil通道中發(fā)送數(shù)據(jù)。
如果打印這些值,您將看到差異。
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貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
回想一下,var name type
創(chuàng)建一個(gè)名為name
type 的變量type
設(shè)置為該類型的默認(rèn)值。這意味著var a chan int
創(chuàng)建一個(gè)通道,使得a == nil
.
var a chan int = make(chan int)
但是a := make(chan int)
,它們是相同的。

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