Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 创建频道时的新vs make_Go_Channel - Fatal编程技术网

Go 创建频道时的新vs make

Go 创建频道时的新vs make,go,channel,Go,Channel,在围棋中,我阅读了文档并理解了make和new 新建:返回指针(*T)并将其指向的值置零 制造商:返回类型T 我阅读了文档,主要是使用数组的示例。创建数组时,我了解newvsmake。但我不理解创建频道时的区别: c1 := new(chan string) c2 := make(chan string) 除了c1有类型(chan*)和c2有类型chan之外,真正的区别是什么 感谢中解释了new的行为 它是一个分配内存的内置函数,但与其他一些语言中的同名函数不同,它不初始化内存,只将内存归

在围棋中,我阅读了文档并理解了
make
new

  • 新建:返回指针(*T)并将其指向的值置零
  • 制造商:返回类型T
我阅读了文档,主要是使用数组的示例。创建数组时,我了解
new
vs
make
。但我不理解创建频道时的区别:

c1 := new(chan string)
c2 := make(chan string)
除了c1有类型(chan*)和c2有类型chan之外,真正的区别是什么


感谢中解释了
new
的行为

它是一个分配内存的内置函数,但与其他一些语言中的同名函数不同,它不初始化内存,只将内存归零

在这种情况下,
new(chan-string)
返回一个指向类型为
chan-string
的零值的指针,该零值是nil通道。以下程序在尝试从nil通道读取时发生死锁

package main

import (
    "fmt"
)

func main() {
    c1 := new(chan string)
    fmt.Println(*c1)
    go func() {
        *c1 <- "s"
    }()
    fmt.Println(<-*c1)
}

@Flimzy我以前搜索过那个帖子,但我无法将这个概念映射到“频道”。所以我问了这个问题。这个问题直接而明确地解决了渠道问题。如果你没有“映射”这个概念,那就意味着你没有阅读答案。
package main

import (
    "fmt"
)

func main() {
    c2 := make(chan string)
    fmt.Println(c2)
    go func() {
        c2 <- "s"
    }()
    fmt.Println(<-c2)
}