Novos valores podem ser adicionados ao Nil Slice, mas adicionar novos valores ao Nil Map gera um erro de tempo de execução. Vamos ver por quê
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Por que anexar a um Nil Slice funciona:
Slice é uma referência a uma matriz subjacente e a uma estrutura de dados de tamanho dinâmico. Consiste em 3 componentes
Quando declaramos uma fatia nula, o comprimento e a capacidade serão zero e não apontam para nenhum array subjacente. Basicamente, a operação de acréscimo verifica a capacidade e, se não for suficiente, aloca um novo array subjacente com capacidade suficiente para armazenar os novos elementos e retorna uma nova fatia que aponta para o array recém-criado. Portanto, anexar funciona conforme o esperado.
Por que adicionar a um mapa nulo não funciona:
O mapa em golang atua basicamente como uma tabela hash e as estruturas de dados internas precisam ser inicializadas primeiro antes de podermos armazenar o par chave-valor.
Quando declaramos um mapa como nulo (var m map[string]int), ele não foi inicializado e ainda não está pronto para armazenar pares de valores-chave. Portanto, isso criará um erro de tempo de execução quando tentarmos adicionar valores a um mapa nulo. Para evitar tais erros, crie um mapa usando make
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
Para saber mais sobre esses tópicos junto com exemplos de código, sinta-se à vontade para verificar meu repositório no Github:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3