Dictionary 戈朗。航道图

Dictionary 戈朗。航道图,dictionary,go,channel,Dictionary,Go,Channel,我想根据字符串索引一些频道。我正在使用地图,但它不允许我为它指定频道。我不断收到“恐慌:分配到零地图中的条目”,我遗漏了什么 package main import "fmt" func main() { var things map[string](chan int) things["stuff"] = make(chan int) things["stuff"] <- 2 mything := <-things["stuff"] fmt

我想根据字符串索引一些频道。我正在使用地图,但它不允许我为它指定频道。我不断收到“恐慌:分配到零地图中的条目”,我遗漏了什么

package main

import "fmt"

func main() {
    var things map[string](chan int)
    things["stuff"] = make(chan int)
    things["stuff"] <- 2
    mything := <-things["stuff"]
    fmt.Printf("my thing: %d", mything)
}
主程序包
输入“fmt”
func main(){
变量事物映射[string](chan int)
东西[“东西”]=制造(成龙内部)

things[“stuff”]您需要首先初始化映射。类似于:

things := make(map[string](chan int))
另一件事是,您正在发送并试图从一个非缓冲通道消费,因此程序将处于死锁状态。因此,可以使用缓冲通道或在goroutine中发送/消费

我在这里使用了一个缓冲通道:

package main

import "fmt"

func main() {
    things := make(map[string](chan int))

    things["stuff"] = make(chan int, 2)
    things["stuff"] <- 2
    mything := <-things["stuff"]
    fmt.Printf("my thing: %d", mything)
}
主程序包
输入“fmt”
func main(){
事物:=make(映射[字符串](chanint))
东西[“东西”]=制造(chan int,2)

事物[“东西”]你可以用
make
或一个map-literal来初始化一个map。也许可以浏览一下包含所有基本内容的。只是一个小的澄清,以防万一:map的零值是nil。正如答案所说,出于好奇,你需要用
make
来初始化它,你为什么要把
chan int
放在括号里?语法是
make>(映射[string]chan int)
工作正常。哦,它是在原始代码中。我只修改了我必须修改的部分。@masnun你能告诉我们/我为什么使用缓冲区大小2而不是1吗?我尝试了1,但程序仍然工作。这个特定的代码示例放一个东西并检索一个东西。因此
1
在这里很好。我使用
2
没有特别的原因原因。