Ainda estou intrigado com o motivo pelo qual temos new
em Go.
Quando você deseja instanciar uma estrutura, você faz
t := Thing{}
e você pode obter um ponteiro para uma nova instância fazendo
t := &Thing{}
Mas há também essa possibilidade:
t := new(Thing)
Este último parece um pouco estranho para o resto da linguagem. &Thing{}
é tão claro e conciso new(Thing)
e usa apenas construções que você costuma usar em outros lugares. Também é mais extensível, pois você pode alterá-lo para &Thing{3}
ou &Thing{Feets:7}
.
Na minha opinião, ter uma palavra-chave complementar 1 é cara, torna o idioma mais complexo e contribui para o que você deve saber. E isso pode mascarar para os novatos o que está por trás de instanciar uma estrutura.
Também cria mais uma palavra reservada.
Então, qual é o raciocínio por trás new
? Às vezes é útil? Devemos usá-lo?
1 : Sim, eu sei que não é uma palavra-chave no nível gramatical, você pode ocultá-la , mas isso não muda o fato de ser, para o desenvolvedor razoável, uma palavra reservada.
Respostas:
A melhor maneira de perguntar é provavelmente para as pessoas que trabalham nela; exatamente o que eu fiz !
Tl; dr: estava originalmente lá antes
make
e&{}
, e ainda é a função a ser usada em algumas situações.Basicamente, aqui estão as partes mais importantes citadas:
Depois de outra resposta mostrando esse tipo de solução:
Pedi esclarecimentos adicionais:
Também está lá principalmente por razões históricas:
fonte
v := &(0)
e pular a variável temp? (Eu sei que no Go.)0
é uma constante literal, você não pode usar o endereço. Um problema ocorreria se você também desejasse um tipo específico. É por isso que uma sintaxe gosta&int
ou&int(0)
pode ser útil (embora não tenha pensado muito na melhor sintaxe). Mas fazê-lo em duas linhas, como Collins mostrou, também está bem (vv := 0; v := &vv
).Go 2
é considerado prejudicial.