En Go, ¿cuál es la diferencia entre var s []inty s := make([]int, 0)?
Encuentro que ambos funcionan, pero ¿cuál es mejor?
go
allocation
slice
Wang Yi
fuente
fuente

nilsegmento, mientras que el segundo crea unemptysegmento (esta es la terminología utilizada por el "Libro de acción" ). Para evitar publicar la misma respuesta aquí también, puede consultar stackoverflow.com/a/45997533/1561148Respuestas:
Además de la respuesta de fabriziom , puede ver más ejemplos en " Go Slices: uso e internos ", donde se menciona el uso de :
[]intSignifica que, para agregar a un segmento, no es necesario asignar memoria primero: el
nilsegmentop int[]es suficiente como un segmento para agregar.fuente
var p []intmás fácil que usarmake(que asocio más con la asignación, aunque con un límite de 0, no asignaría nada). En términos de legibilidad, prefiero no usarmakeaquí.p := []int{}). Dado que usualmente usamos:=sintaxis para declarar la mayoría de las variables, es más natural tenerla en todas partes en lugar de tener excepciones para los segmentos. Aparte de esto, tratar de pensar en asignaciones generalmente empuja a las personas hacia optimizaciones prematuras.Declaración simple
no asigna memoria y
sapunta anil, mientrasasigna memoria y
sapunta a la memoria a un segmento con 0 elementos.Por lo general, el primero es más idiomático si no conoce el tamaño exacto de su caso de uso.
fuente
makemapas, porque incluso unmapespacio vacío necesita espacio asignado para algo de contabilidad.nilen caso de que su segmento no tenga ningún elemento, en lugar de una matriz vacía. Sin embargo, simakese usa para crear el segmento, se devolverá una matriz vacía en su lugar, que generalmente es el efecto deseado.var s []int) produciránull, mientras que el cálculo del segmento vacío (s := make([]int, 0)) producirá el esperado[]Solo encontré una diferencia. Si utiliza
y luego codificas la salida como JSON, obtienes
null.resultados
[]como se esperaba.fuente
Un
makeejemplo un poco más completo (un argumento más en ):Fuera:
O con tipo dinámico de
slice:Fuera:
fuente