33/100 Dias de Golang - make()
Table of Contents
#
make()
Aproveitando o Dia 32/100 busquei no roadmap.sh sobre os tópicos que já tinha estudado e verifiquei quais pontos ainda não tinha visto ou não sabia do que se tratava. A função make()
entra nos assuntos que já vi nos materias que estou usando para estudar, mas pensando com mais profundidade não sei qual a utilidade dela nem quando fazer uso da mesma. Nesse posto pretendo sanar essas dúvidas.
#
Definição
A função make()
server para alocar e inicializar um slice, map ou channel. Ela retorna o valor inicializado e pronto para uso. Sintaxe básica:
make(tipo, tamanho, capacidade)
Para definir um slice de tamanho 5 e capacidade 10
s := make([]int, 5, 10)
fmt.Println(len(s))
fmt.Println(cap(s))
Um map
m := make(map[string]int)
m["chave"] = 10
fmt.Println(m["chave"])
Um channel com buffer para 2 valores
ch := make(chan int, 2)
ch <- 1
ch <- 2
fmt.Println(<-ch)
#
Diferença entre alocar uma variável “normalmente” e usar make
var m map[string]int
m["chave"] = 42
Se você tentar executar esse código vai receber um panic
. Pois o mapa m
foi declarado, mas não foi inicializado. Em Go, você precisa inicializar o mapa antes de usá-lo, caso contrário, ele será nil, e tentar atribuir um valor a uma chave em um mapa nil resulta em runtime panic. O correto seria inicializar o mapa com o make
.
m := make(map[string]int)
m["chave"] = 42
O make inicializa a estrutura interna do tipo.
Nós sempre podemos inicializar o map com valores. Nesse caso estamos declarando e inicializando o mapa ao mesmo tempo. O compilador do Go entende que queremos criar um mapa e já o inicializa com os valores fornecidos
var x = map[string]int{
"key1": 1,
"key2": 2,
"key3": 3,
}
Esse map com valores pré definidos tem um uso mais restrito, temos que conhecer os dados previamente. Preferencialmente devemos sempre escolher inicializar os maps, slices e channels com o make()