运行时错误"恐慌:分配到nil map中的条目"

时间:2018-06-03 16:58:00

标签: go

我制作了一个config.go,它有助于编辑配置文件,但我有一个地图为nil的错误,这是错误来自的地方:

type(
    Content map[string]interface{}
    Config struct {
         file       string
         config     Content
         configType int
    }
)
func (c *Config) Set(key string, value interface{}) {
    c.config[key] = value
}

1 个答案:

答案 0 :(得分:4)

  

The Go Programming Language Specification

     

Map types

     

地图是一种无序的一组元素,称为   元素类型,由一组另一种类型的唯一键索引,称为   关键类型。未初始化地图的值为零。

     

使用内置函数make创建一个新的空映射值   将地图类型和可选容量提示作为参数:

make(map[string]int)
make(map[string]int, 100)
     

初始容量不限制其大小:地图增长以容纳   存储在其中的项目数,但nil地图除外。一个   nil map相当于一个空映射,除了没有元素   加入。

未初始化地图的值为nil。在第一次写入之前初始化地图。

例如,

package main

import (
    "fmt"
)

type (
    Content map[string]interface{}
    Config  struct {
        file       string
        config     Content
        configType int
    }
)

func (c *Config) Set(key string, value interface{}) {
    if c.config == nil {
        c.config = make(Content)
    }
    c.config[key] = value
}

func main() {
    var c Config
    c.Set("keya", "valuea")
    fmt.Println(c)
    c.Set("keyb", "valueb")
    fmt.Println(c)
}

游乐场:https://play.golang.org/p/6AnvIZZRml_y

输出:

{ map[keya:valuea] 0}
{ map[keya:valuea keyb:valueb] 0}