La mejor manera de preguntar es probablemente a las personas que trabajan en él; ¡exactamente lo que hice !
Tl; dr: originalmente estaba allí antes make
y &{}
todavía es la función para usar en algunas situaciones.
Básicamente, aquí están las partes más importantes citadas:
Entonces, ¿cuál es el razonamiento detrás de lo nuevo? ¿Es algo útil? ¿Deberíamos usarlo?
No puedes hacer esto sin novedades
v := new(int)
*v++
fmt.Println(*v)
nuevo no es una característica principal de Go, no lo encontrarás usado a menudo, pero cuando lo necesites, está ahí.
Salud
Dave
Después de otra respuesta que muestra este tipo de solución:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Pedí más aclaraciones:
Entonces, básicamente, ¿el punto de Dave realmente no es válido?
Hay lugares donde es inconveniente introducir una nueva variable solo para tomar su dirección.
nuevo (T) tiene un significado directo e inmediato, en lugar de ser un modismo de varios pasos.
El punto de Dave solo cae si la mera posibilidad técnica (de prescindir
new
) es convincente por sí sola.
¿No se discutió esto porque era obvio que Go debería tenerlo porque casi todos los idiomas lo tienen?
El "¿nos quedaremos new
?" De vez en cuando surge una discusión. Dado que no podemos eliminarlo hasta el Go 2, si entiendo la Promesa correctamente, no parece que haya mucho que recorrer de nuevo; para cuando Go 2 sea pensable, podríamos tener algunas ideas diferentes y mejores ...
Chris
También está allí principalmente por razones históricas:
debes considerar la historia del proyecto. Creo que lo nuevo se introduce primero antes de que haya una marca.
Eso es verdad. De hecho, luchamos por un tiempo antes de tener la idea de hacer. Si observa los registros del repositorio, puede ver que make solo aparece en enero de 2009, revisión 9a924177598f.
La nueva función incorporada también precedió a la idea de & {} para tomar la dirección de un literal compuesto (y esa sintaxis es en cierto sentido incorrecta; probablemente debería ser (* T) {campos de T} pero no había suficiente razón para cambiarlo).
La nueva función no es estrictamente necesaria, pero el código parece usarla en la práctica. Es difícil deshacerse de él en este momento.
Ian