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?
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.
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.
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