選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP How to W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Go 訪問、修改、追加和複製切片


訪問切片元素

您可以透過索引號來訪問切片中的特定元素。

在 Go 語言中,索引從 0 開始。這意味著 [0] 是第一個元素,[1] 是第二個元素,以此類推。

示例

此示例演示瞭如何訪問 prices 切片中的第一個和第三個元素

package main
import ("fmt")

func main() {
  prices := []int{10,20,30}

  fmt.Println(prices[0])
  fmt.Println(prices[2])
}

結果

10
30
自己動手試一試 »

修改切片元素

您也可以透過索引號來修改切片中的特定元素。

示例

此示例演示瞭如何修改 prices 切片中的第三個元素

package main
import ("fmt")

func main() {
  prices := []int{10,20,30}
  prices[2] = 50
  fmt.Println(prices[0])
  fmt.Println(prices[2])
}

結果

10
50
自己動手試一試 »

向切片追加元素

您可以使用 append() 函式將元素追加到切片末尾

語法

slice_name = append(slice_name, element1, element2, ...)

示例

此示例演示瞭如何將元素追加到切片末尾

package main
import ("fmt")

func main() {
  myslice1 := []int{1, 2, 3, 4, 5, 6}
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = append(myslice1, 20, 21)
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))
}

結果

myslice1 = [1 2 3 4 5 6]
length = 6
capacity = 6
myslice1 = [1 2 3 4 5 6 20 21]
length = 8
capacity = 12
自己動手試一試 »


將一個切片追加到另一個切片

要將一個切片的所有元素追加到另一個切片,請使用 append() 函式

語法

slice3 = append(slice1, slice2...)

注意:slice2 後面加上 '...' 在將一個切片的元素追加到另一個切片時是必需的

示例

此示例演示瞭如何將一個切片追加到另一個切片

package main
import ("fmt")

func main() {
  myslice1 := []int{1,2,3}
  myslice2 := []int{4,5,6}
  myslice3 := append(myslice1, myslice2...)

  fmt.Printf("myslice3=%v\n", myslice3)
  fmt.Printf("length=%d\n", len(myslice3))
  fmt.Printf("capacity=%d\n", cap(myslice3))
}

結果

myslice3=[1 2 3 4 5 6]
length=6
capacity=6
自己動手試一試 »

改變切片的長度

與陣列不同,切片的長度是可以改變的。

示例

此示例演示瞭如何改變切片的長度

package main
import ("fmt")

func main() {
  arr1 := [6]int{9, 10, 11, 12, 13, 14} // 一個數組
  myslice1 := arr1[1:5] // 切片陣列
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = arr1[1:3] // 透過重新切片陣列來改變長度
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = append(myslice1, 20, 21, 22, 23) // 透過追加項來改變長度
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))
}

結果

myslice1 = [10 11 12 13]
length = 4
capacity = 5
myslice1 = [10 11]
length = 2
capacity = 5
myslice1 = [10 11 20 21 22 23]
length = 6
capacity = 10
自己動手試一試 »

記憶體效率

 在使用切片時,Go 會將所有底層元素載入到記憶體中。

如果陣列很大,而您只需要其中的幾個元素,最好使用 copy() 函式來複制這些元素。

copy() 函式會建立一個包含切片所需元素的新的底層陣列。這可以減少程式的記憶體使用量。

語法

copy(dest, src)

copy() 函式接受兩個切片 destsrc,並將資料從 src 複製到 dest。它返回複製的元素數量。

示例

此示例演示瞭如何使用 copy() 函式

package main
import ("fmt")

func main() {
  numbers := []int{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
  // 原始切片
  fmt.Printf("numbers = %v\n", numbers)
  fmt.Printf("length = %d\n", len(numbers))
  fmt.Printf("capacity = %d\n", cap(numbers))

  // 建立一個只包含所需數字的副本
  neededNumbers := numbers[:len(numbers)-10]
  numbersCopy := make([]int, len(neededNumbers))
  copy(numbersCopy, neededNumbers)

  fmt.Printf("numbersCopy = %v\n", numbersCopy)
  fmt.Printf("length = %d\n", len(numbersCopy))
  fmt.Printf("capacity = %d\n", cap(numbersCopy))
}

結果

// 原始切片
numbers = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
length = 15
capacity = 15
// 新切片
numbersCopy = [1 2 3 4 5]
length = 5
capacity = 5
自己動手試一試 »

新切片的容量現在小於原始切片的容量,因為新的底層陣列較小。


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援