"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Go Basics: Por que nil Slices aceitam novos valores, mas nil Maps não

Go Basics: Por que nil Slices aceitam novos valores, mas nil Maps não

Publicado em 01/11/2024
Navegar:416

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

  • Ponteiro para array subjacente
  • Comprimento da fatia
  • Capacidade da fatia

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]

  • Go suporta Pass By Ref?
  • novo vs make in Go
  • Go suporta herança?
  • Como criar um servidor web simples em Go?

Para saber mais sobre esses tópicos junto com exemplos de código, sinta-se à vontade para verificar meu repositório no Github:

Go Basics: Why nil Slices accept new values, but nil Maps don Sai7xp / aprenda-golang

GoLang Básico ao Avançado. Incluindo padrões de design, princípios SOLID e muito mais

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

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