In Go ist eine Scheibe eine flexible und leistungsstarke Datenstruktur, die auf einem Array aufgebaut ist. Es hat zwei wichtige Eigenschaften: Länge und Kapazität.
len()
-Funktion erhalten.cap()
erhalten. Hier ist ein einfaches Beispiel, das die Verwendung von len()
und cap()
demonstriert:
<code class="go">package main import "fmt" func main() { s := make([]int, 5, 10) // Creates a slice with length 5 and capacity 10 fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
In diesem Beispiel hat das Slice s
eine Länge von 5 und eine Kapazität von 10.
Die Kapazität eines Slice in Go ist unveränderlich, sobald es erstellt wurde. Sie können die Kapazität einer vorhandenen Slice nicht direkt ändern. Mit einigen Methoden können Sie jedoch eine neue Scheibe mit einer anderen Kapazität erstellen:
Verwenden der make
: Sie können eine neue Scheibe mit einer bestimmten Länge und Kapazität erstellen.
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
Verwenden der append
: Wenn Sie Elemente an ein Slice anhängen, erhöht Go bei Bedarf automatisch die Kapazität.
<code class="go">s := []int{1, 2, 3} s = append(s, 4, 5, 6) // This might increase the capacity if needed</code>
Verwenden der copy
: Sie können den Inhalt des alten Slice mit einer anderen Kapazität in eine neue Scheibe kopieren.
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
Hier ist ein Beispiel, um diese Methoden zu veranschaulichen:
<code class="go">package main import "fmt" func main() { s := []int{1, 2, 3} // Length: 3, Capacity: 3 fmt.Printf("Original: Length: %d, Capacity: %d\n", len(s), cap(s)) // Using make and copy newSlice := make([]int, len(s), 10) copy(newSlice, s) fmt.Printf("After make and copy: Length: %d, Capacity: %d\n", len(newSlice), cap(newSlice)) // Using append s = append(s, 4, 5, 6, 7) fmt.Printf("After append: Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
In Go wird der Versuch, auf einen Index zuzugreifen, der über die Länge eines Slice hinausgeht, zu einer Laufzeit -Panik. Dies liegt daran, dass die Länge des Slice den Bereich der Indizes definiert, auf den Sie sicher zugreifen können.
Hier ist ein Beispiel:
<code class="go">package main import "fmt" func main() { s := []int{1, 2, 3} // Length: 3 fmt.Println(s[0]) // This is valid fmt.Println(s[3]) // This will cause a runtime panic }</code>
Die Fehlermeldung, die Sie sehen würden, lautet so etwas:
<code>panic: runtime error: index out of range [3] with length 3</code>
Diese Panik tritt auf, weil der Index 3 außerhalb der Grenzen des Slice liegt, dessen Länge 3 ist.
Die Länge und Kapazität eines Slice in Go dienen unterschiedlichen Zwecken und spielen unterschiedliche Rollen:
len(s) - 1
zugreifen, und versuchen, auf einen Index darüber hinaus zuzugreifen, über dies führt zu einer Laufzeit -Panik.append
auf die Kapazität erhöhen, ohne die Speicherumgestaltung auszulösen.Hier ist eine Zusammenfassung ihrer Unterschiede:
Länge :
len(s)
.Kapazität :
cap(s)
.Hier ist ein Beispiel, das diese Konzepte veranschaulicht:
<code class="go">package main import "fmt" func main() { s := make([]int, 3, 5) // Length: 3, Capacity: 5 fmt.Printf("Initial: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 4) // Length: 4, Capacity: 5 fmt.Printf("After first append: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 5) // Length: 5, Capacity: 5 fmt.Printf("After second append: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 6) // Length: 6, Capacity might increase fmt.Printf("After third append: Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
In diesem Beispiel beginnt die Scheibe mit einer Länge von 3 und einer Kapazität von 5. Wenn wir Elemente anhängen, nimmt die Länge zu, bis sie die Kapazität erreicht. Die Kapazität kann zunehmen, wenn wir die ursprüngliche Kapazität überschreiten.
Das obige ist der detaillierte Inhalt vonWas ist die Kapazität und Länge eines Scheibens?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!