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 关注
- 131 浏览
添加回答
举报