在Go中,我阅读文档并理解make和之间的基本差异new
我阅读文档,主要是使用数组的示例.我在创建数组时理解newvs.make但是在创建频道时我不明白差异:
c1 := new(chan string)
c2 := make(chan string)
Run Code Online (Sandbox Code Playgroud)
除了c1具有类型(chan*)和c2具有类型chan之外,真正的差异是什么.
谢谢
new在Allocation with中new解释了行为.
它是一个内置函数,可以分配内存,但与其他语言中的名称不同,它不会初始化内存,它只会将内存归零.
在这种情况下,new(chan string)返回一个指向零值的指针chan string,这是零通道.以下程序在尝试从nil通道读取时死锁.
package main
import (
"fmt"
)
func main() {
c1 := new(chan string)
fmt.Println(*c1)
go func() {
*c1 <- "s"
}()
fmt.Println(<-*c1)
}
Run Code Online (Sandbox Code Playgroud)
随着make(chan string)您获得实际可用的通道,而不是通道类型的零值.
package main
import (
"fmt"
)
func main() {
c2 := make(chan string)
fmt.Println(c2)
go func() {
c2 <- "s"
}()
fmt.Println(<-c2)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |