在GO中,切片是在數組頂部構建的靈活而強大的數據結構。它具有兩個關鍵特性:長度和容量。
len()
函數獲得切片的長度。cap()
函數獲得切片的容量。這是一個簡單的示例,證明了len()
和cap()
的使用:
<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>
在此示例中,切片s
長度為5,容量為10。
一旦創建,切片中的切片的容量就不可能。您不能直接修改現有切片的容量。但是,您可以使用一些方法創建具有不同容量的新切片:
使用make
功能:您可以創建具有指定長度和容量的新切片。
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
使用append
函數:當您將元素附加到切片上時,GO將在必要時自動增加容量。
<code class="go">s := []int{1, 2, 3} s = append(s, 4, 5, 6) // This might increase the capacity if needed</code>
使用copy
功能:您可以將舊切片的內容複製到具有不同容量的新切片。
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
這是一個說明這些方法的示例:
<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>
在GO中,嘗試訪問索引超出切片的長度將導致運行時恐慌。這是因為切片的長度定義了您可以安全訪問的索引範圍。
這是一個例子:
<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>
您會看到的錯誤消息是這樣的:
<code>panic: runtime error: index out of range [3] with length 3</code>
這種恐慌之所以發生,是因為索引3在切片的邊界之外,其長度為3。
切片的長度和能力在GO中起著不同的目的,並且具有不同的作用:
len(s) - 1
的切片元素,並嘗試訪問索引以外的索引將導致運行時恐慌。append
功能將切片的長度提高到容量,而無需觸發內存重新分配。這是他們差異的摘要:
長度:
len(s)
訪問。容量:
cap(s)
訪問。這是一個說明這些概念的示例:
<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>
在此示例中,切片的長度為3,容量為5。當我們附加元素時,長度會增加,直到達到容量為止。當我們超過原始容量時,容量可能會增加。
以上是切片的能力和長度是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!