在Go中,我阅读了文档并了解make
和new
我阅读文档,主要是使用数组的示例。创建数组时,我了解new
vs make
。但是在创建频道时我不明白差异:
c1 := new(chan string)
c2 := make(chan string)
除了c1具有类型(chan *)和c2具有类型chan
之外,真正的差异是什么由于
答案 0 :(得分:5)
new
中解释了new(chan string)
的行为。
这是一个内置函数,可以分配内存,但与其他语言中的名称不同,它不会初始化内存,只有零它。
在这种情况下,chan string
返回指向类型为package main
import (
"fmt"
)
func main() {
c1 := new(chan string)
fmt.Println(*c1)
go func() {
*c1 <- "s"
}()
fmt.Println(<-*c1)
}
的零值的指针,这是零通道。以下程序在尝试从nil通道读取时死锁。
make(chan string)
使用package main
import (
"fmt"
)
func main() {
c2 := make(chan string)
fmt.Println(c2)
go func() {
c2 <- "s"
}()
fmt.Println(<-c2)
}
,您将获得实际可用的频道,而不是频道类型的零值。
./bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic my-topic --partitions 20