Ошибка выполнения "паника: назначение записи в ноль-карте" - PullRequest
0 голосов
/ 03 июня 2018

Я сделал config.go, который помогает редактировать файл конфигурации, но у меня есть ошибка с картой, равной нулю, и вот откуда возникает ошибка:

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 голосов
/ 03 июня 2018

Спецификация языка программирования Go

Типы карт

Карта - это неупорядоченная группа элементов одного типа, называемаятип элемента, индексируемый набором уникальных ключей другого типа, называется типом ключа.Значение неинициализированной карты равно nil.

Новое пустое значение карты создается с использованием встроенной функции make, которая принимает тип карты и необязательный указатель емкости в качестве аргументов:

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

Первоначальная емкость не ограничивает свой размер: карты растут в соответствии с количеством хранящихся в них предметов, за исключением нулевых карт.Нулевая карта эквивалентна пустой карте, за исключением того, что никакие элементы не могут быть добавлены.


Значение неинициализированной карты равно 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...