Make VS New

By: Georgio Barbosa da Fonseca On: Sun 05 November 2017
In: golang
Tags:

Make() vs New()

Este post será breve, trata se de uma explicação das funções embutidas make() e new().

New

A função embutida new aloca espaço na memória para um determinado tipo, e retorna um ponteiro para este endereço recém alocado

var i *int
i = new(int)

fmt.Printf(> %d, *i)

Note que a nossa posição de memória já está inicializada com o seu respectivo zerovalue, no caso 0, mas isto será abordado em outro post.

Make

A função make funciona apenas para as primitivas slice, chanel e map, esses tipos em especial não podem ser apenas alocados, eles também precisam ser inicializados, com valores específicos. Segundo o documento oficial Effective GO estes tipos, são na verdade estruturas de dados que precisam ter seus campos preenchidos com os devidos valores. No caso do tipo slice por exemplo, trata se de uma estrutura com os campos, data (referência para um array), tamanho e capacidade. Diferente da função new a função make não retorna um ponteiro, mas sim um valor.

var s []int = make([]int, 10)
fmt.Prinln(s)

Declaração ilegal

d := make(int)

Saída

code/make-vs-new.go:16: cannot make type int

Finalizando 👻

Apesar da ambiguidade que os termos make e new podem gerar, essas duas funções tem propósitos totalmente diferente. A função new realiza alocação de memória de forma similar a função maloc da linguagem C, enquanto a função make tem o propósito de inicializar primitivas especiais da linguagem.

Até a próxima 🚀


If you found the article helpful, please share or cite the article, and spread the word:


For any feedback or corrections, please write in to: georgio.barbosa@gmail.com