📕
Go 語言程式設計入門
  • 最新消息
  • 中文版更新日誌
  • 譯者誌謝
  • 01-起步走
    • 01.01-檔案與資料夾
    • 01.02-終端機(Terminal)
    • 01.03-文字編輯器
    • 01.04-Go 的工具
  • 02-你的第一個程式
    • 02.01-如何讀 Go 程式
    • 02.02-問題
  • 03-型別
    • 03.01-數字
    • 03.02-字串
    • 03.03-問題
  • 04-變數
    • 04.01-如何命名變數
    • 04.02-Scope(變數的作用範圍)
    • 04.03-常數(Constant)
    • 04.04-定義多個變數
    • 04.05-範例程式
    • 04.06-問題
  • 05-控制結構
    • 05.01-For
    • 05.02-If
    • 05.03-switch
    • 05.04-問題
  • 06-Array、Slice 與 Map
    • 06.01-陣列(Array)
    • 06.02-Slice
    • 06.03-Map
    • 06.04-問題
  • 07-函式
    • 07.01-你的第二個函式
    • 07.02-回傳多個值
    • 07.03-參數個數可變的函式(Variadic Function)
    • 07.04-Closure
    • 07.05-遞迴(Recursive)
    • 07.06-Defer, Panic & Recover
    • 07.07-Panic & Recover
    • 07.08-問題
  • 08-指標
    • 08.01-「*」與「&」運算符號
    • 08.02-new
    • 08.03-問題
  • 09-Struct 與 Interface
    • 09.01-struct
    • 09.02-Method
    • 09.03-Interface
    • 09.04-問題
  • 10-Concurrency(平行處理)
    • 10.01-Goroutine
    • 10.02-Channel
    • 10.03-問題
  • 11-Packages
    • 11.01-建立 Package
    • 11.02-文件
    • 11.03-問題
  • 12-測試
  • 13-The Core Packages
    • 13.01-字串
    • 13.02-輸入與輸出
    • 13.03-檔案與資料夾
    • 13.04-錯誤訊息
    • 13.05-Container 與 Sort
    • 13.06-雜湊&加解密
    • 13.07-伺服器
    • 13.08-解析命令列參數
    • 13.09-Synchronization Primitives(同步處理原始物件)
  • 14-下一步
    • 14.01-閱讀大師作品
    • 14.02-動手實作
    • 14.03-團隊合作
  • 15. 附錄-額外資源
Powered by GitBook
On this page
Edit on GitHub
  1. 06-Array、Slice 與 Map

06.02-Slice

Previous06.01-陣列(Array)Next06.03-Map

Last updated 2 years ago

Slice 是在一個陣列中的一個區段(segment),與陣列一樣,slice 是可以透過索引存取的,而且也有長度。但與陣列不同的是,slide 的長度是可以改變的,下列是一個 slice 範例:

 var x []float64

Slice 與陣列的唯一差別是,在中括號之間沒有表示長度的數字。以此例而言,x 的長度為 0。

若你想建立一個 slice,則你應該使用內建的 make 函式:

x := make([]float64, 5)

這樣會建立一個 slice(這個 slice 與底層長度為 5 的 float64 陣列有關連),slices 必定會與某個陣列有關聯,而且它們的長度不僅不會超過陣列長度,還可以更小。make 函式可以使用第三個參數:

x := make([]float64, 5, 10)

10 代表 slice 所指向的底層陣列之空間:

另一個建立 slice 的方式是使用 [low : high] :

arr := [5]float64{1,2,3,4,5}
x := arr[0:5]

low 是 slice 的起點之索引值,而 high 是 slice 的結束點(但是 slice 並不包含這個結束點的索引值),例如:在 arr[0:5] 會傳回 [1,2,3,4,5],而 arr[1:4] 則傳回 [2,3,4]。

為了便利,我們也可以忽略 low、high,甚至可以同時忽略 low 與 high。arr[0:] 等同於 arr[0:len(arr)]、 arr[:5] 等同於 [0:5]、以及 arr[:] 等同於 arr[0:len(arr)]。

Slice 函式

Go 語言有兩個內建的 slice 函式:append 與 copy。下列是一個 append 範例:

func main() {
    slice1 := []int{1,2,3}
    slice2 := append(slice1, 4, 5)
    fmt.Println(slice1, slice2)
}

在執行程式之後,slice1 是 [1,2,3],而 slice2 則是 [1,2,3,4,5]。append 利用現有的 slice(在第一個參數)建立一個新的 slice,並將後續的參數附加在 這個 slice 之後。

下列是一個 copy 範例:

func main() {
    slice1 := []int{1,2,3}
    slice2 := make([]int, 2)
    copy(slice2, slice1)
    fmt.Println(slice1, slice2)
}

在執行此程式之後,slice1 是 [1,2,3],而 slice2 是 [1,2],將 slice1 的內容複製到 slice2,不過因為 slice2 的空間只能容納兩個元素,所以只有複製 slice1 的前兩個元素。