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:
Então, qual é o raciocínio por trás do novo? É algo útil? Devemos usá-lo?
Você não pode fazer isso sem novas
v := new(int)
*v++
fmt.Println(*v)
new não é um recurso principal do Go, você não o encontrará usado com frequência, mas quando precisar, ele estará lá.
Felicidades
Dave
Depois de outra resposta mostrando esse tipo de solução:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Pedi esclarecimentos adicionais:
Então, basicamente, o argumento de Dave realmente não se sustenta?
Há lugares em que é inconveniente ocultar uma nova variável apenas para obter seu endereço.
new (T) tem um significado imediatamente direto, em vez de ser um idioma de várias etapas.
O argumento de Dave só cai se a mera possibilidade técnica (de new
ficar sem
) for convincente por si só.
Isso não foi discutido porque era óbvio que o Go deveria tê-lo porque quase todo idioma o possui?
O "devemos guardar new
?" a discussão aparece de tempos em tempos. Como não podemos retirá-lo até a segunda etapa, se eu entendi a Promessa corretamente, não parece haver muito a se fazer em torno da volta novamente; quando o Go 2 for pensável, podemos ter algumas idéias melhores e diferentes ...
Chris
Também está lá principalmente por razões históricas:
você precisa considerar a história do projeto. Eu acho que o novo é introduzido primeiro antes que haja marca.
Isso é verdade. Na verdade, lutamos um pouco antes de ter a idéia de fazer. Se você observar os logs do repositório, poderá ver que a composição é exibida apenas em janeiro de 2009, revisão 9a924177598f.
A nova função incorporada também precedeu a idéia de & {} aceitar o endereço de um literal composto (e essa sintaxe está, em certo sentido, errada; provavelmente deveria ser (* T) {campos de T}, mas não havia o suficiente razão para mudar).
A nova função não é estritamente necessária, mas o código parece usá-la na prática. É difícil se livrar disso neste momento.
Ian