Todavía estoy desconcertado de por qué tenemos new
en Go.
Cuando quieres crear una instancia de una estructura, lo haces
t := Thing{}
y puede obtener un puntero a una nueva instancia haciendo
t := &Thing{}
Pero también existe esta posibilidad:
t := new(Thing)
Este último parece un poco ajeno al resto del lenguaje. &Thing{}
es tan claro y conciso como new(Thing)
y solo utiliza construcciones que a menudo usa en otros lugares. También es más extensible, ya que podría cambiarlo a &Thing{3}
o &Thing{Feets:7}
.
En mi opinión, tener una palabra clave complementaria 1 es costoso, hace que el lenguaje sea más complejo y se suma a lo que debe saber. Y podría enmascarar a los recién llegados lo que hay detrás de crear instancias de una estructura.
También hace una palabra más reservada.
Entonces, ¿cuál es el razonamiento detrás new
? ¿A veces es útil? ¿Deberíamos usarlo?
1 : Sí, sé que no es una palabra clave en el nivel de gramática, puede ocultarla , pero eso no cambia el hecho de que es, para el desarrollador razonable, una palabra reservada.
Respuestas:
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:
Después de otra respuesta que muestra este tipo de solución:
Pedí más aclaraciones:
También está allí principalmente por razones históricas:
fuente
v := &(0)
y omitir la variable temporal? (No sé ir.)0
es una constante literal, no puede tomar su dirección. Se produciría un problema si desea un tipo específico también. Es por eso que una sintaxis gusta&int
o&int(0)
podría ser útil (sin embargo, no pensé mucho en la mejor sintaxis). Pero hacerlo en dos líneas como Collins mostró también está bien (vv := 0; v := &vv
).Go 2
se considera dañino.