go - 如何在循环中创建 map 键?

标签 go

我是按照课本做的,但是有错误

panic :分配给 nil 映射中的条目(在 keyval["{x[i]}"] = 0 行中)

package main
import "fmt"

func main() {
    x := [3]string{"aa","bb","cc"}

    var keyval map[string]int

    for i := 0; i < len(x); i++ {
        keyval["{x[i]}"] = 0
    }

    fmt.Println(keyval)
}

我尝试使用 keyval["x[i]"] = 0 但效果是一样的

最佳答案

您必须首先初始化您的 map :

keyval := make(map[string]int)

根据 this博文:

Map types are reference types, like pointers or slices, and so the value of m above is nil; it doesn't point to an initialized map.

在这里玩:
https://play.golang.org/p/2JuPS1J7KK

编辑以回答 OP 的跟进。如果您希望使用 slice 中的字符串作为映射的键,则需要进行额外的更改:

keyval[x[i]] = 0

在这里玩:
https://play.golang.org/p/feMSwvbEGS

关于go - 如何在循环中创建 map 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44723188/

相关文章:

go - 双重检查 golang 中的锁定 - 为什么需要 mutex.RLock()?

interface - Go:函数回调返回接口(interface)的实现

go - 在一个程序中同时运行两个 Web 服务器

opencv - go.go.gocmv运行时出错./cmd/version/main.go

go - 如何使用构建器模式构造动态实现接口(interface)的结构

go - 在 golang 中有 nil slice 和 empty slice 有什么意义?

go - 将结构传递给 redigo Send 函数会破坏它并且数据丢失

windows - 命令提示符下的 Go 语言的 godoc

go - 在Go中,当函数返回错误时,其他变量是否始终是其值 "zero"?

go - 如何在 Golang(go-chi) 路由器上同时提供 "/something"和 "/something/"?