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?

Author: Grijesh Chauhan, 2014-08-28

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.

 63
Author: VonC,
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.

 71
Author: fabrizioM,
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