Declarar rebanada o hacer rebanada?
En Golang, ¿cuál es la diferencia entre var s []int
y s := make([]int, 0)
?
Encuentro que ambas funcionan, pero ¿cuál es mejor?
2 answers
Además de la respuesta de fabriziom , puedes ver más ejemplos en " Go Slices: usage and internals", donde se menciona un uso para []int
:
Dado que el valor cero de un slice (
nil
) actúa como un slice de longitud cero , puede declarar una variable slice y luego agregarla en un bucle:
// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
var p []int // == nil
for _, v := range s {
if fn(v) {
p = append(p, v)
}
}
return p
}
Significa que, para anexar a un sector, no es necesario asignar memoria primero: el sector nil
p int[]
es suficiente como sector para añadir a.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:48
Declaración simple
var s []int
No asigna memoria y s
apunta a nil
, mientras que
s := make([]int, 0)
Asigna memoria y s
apunta 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 17:04:48