Zadeklarować plasterek czy zrobić plasterek?

W Golang, jaka jest różnica między var s []int i s := make([]int, 0)?

Uważam, że oba działają, ale który z nich jest lepszy?

Author: Grijesh Chauhan, 2014-08-28

2 answers

Oprócz fabriziom ' S ODPOWIEDŹ , możesz zobaczyć więcej przykładów w " Go Slice: usage and internals ", gdzie użycie dla []int jest wymienione:

Ponieważ wartość zerowa plasterka (nil) działa jak plasterek o zerowej długości , możesz zadeklarować zmienną slice, a następnie dołączyć do niej w pętli:

// 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
}

Oznacza to, że aby dołączyć do plasterka, nie musisz najpierw przydzielać pamięci: plasterek nil p int[] wystarczy jako plasterek dodać za.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:48

Prosta deklaracja

var s []int

Nie przydziela pamięci i s wskazuje na nil, natomiast

s := make([]int, 0)

Przydziela pamięć, a s wskazuje pamięć na plaster z 0 elementami.

Zazwyczaj pierwszy z nich jest bardziej idiomatyczny, jeśli nie znasz dokładnego rozmiaru swojego przypadku użycia.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-05 17:04:48