In Golang, was ist der Unterschied zwischen var s []int
und s := make([]int, 0)
?Scheibe deklarieren oder Scheibe machen?
Ich finde, dass beide funktioniert, aber welche ist besser?
In Golang, was ist der Unterschied zwischen var s []int
und s := make([]int, 0)
?Scheibe deklarieren oder Scheibe machen?
Ich finde, dass beide funktioniert, aber welche ist besser?
Neben fabriziom ‚s answer, können Sie weitere Beispiele bei‚Go Slices: usage and internals‘sehen, wo eine Verwendung für []int
erwähnt wird:
Da der Nullwert von einer Scheibe (
nil
) wirkt wie ein Null-Länge Scheibe, können Sie eine Scheibe Variable deklarieren und dann, um es in einer Schleife anhängen:
// 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
}
es mir ans, dass, um an ein Slice anzuhängen, müssen Sie nicht zuerst Speicher reservieren: das nil
Slice p int[]
ist genug als ein Slice zum Hinzufügen.
Danke! Das ist das, was ich benötige. –
einfache Erklärung
var s []int
nicht-Speicher und s
Punkte auf nil
zuteilt, während
s := make([]int, 0)
Speicher und s
Punkte in den Speicher mit 0 Elementen einer Scheibe zuweist.
Normalerweise ist die erste Sprache idiomatischer, wenn Sie die genaue Größe Ihres Anwendungsfalls nicht kennen.
Kann ich das gleiche für die Karte sagen? var m map [string] int vs. m: = make (map [string] int)? Vielen Dank. – joshua
Nein, Sie müssen Karten erstellen, denn selbst eine leere Karte benötigt Platz für die Buchhaltung. – twotwotwo
Wenn Sie eine Scheibe mit 0 Elementen (anstelle von 'Null') zurückgeben müssen, ist make die richtige Verwendung. – Jess
Der erste erstellt einen "nil" Schnitt, während der zweite einen "leeren" Schnitt erstellt (dies ist die Terminologie, die vom * "In Action Book" *) verwendet wird. Um zu vermeiden, die gleiche Antwort auch hier zu posten, können Sie https://stackoverflow.com/a/45997533/1561148 – tgogos