Go 中 []String 和 ...String 的區別

Jay Singh 2023年1月30日
  1. 在 Go 中使用 []string 定義切片
  2. 在 Go 中使用 ...string 定義可變引數函式
  3. 在 Go 中同時使用 []string...string
Go 中 []String 和 ...String 的區別

陣列部分稱為切片。與陣列相比,切片提供了更多的功能、靈活性和便利性。

切片是可索引的並且有長度,就像陣列一樣。與陣列不同,它們可以擴充套件。

切片是一種資料結構,它定義了陣列的連續部分,並與切片變數分開儲存。

陣列與切片不同。陣列的切片是它的子集。

本文將討論 Go 中 []string...string 之間的區別。

在 Go 中使用 []string 定義切片

在這個例子中,我們使用了 forrange 命令來遍歷一組單詞。

package main

import "fmt"

func main() {
    words := []string{"Iron Man", "Thor", "Hulk", "Dr Strange", "Spiderman"}
    for idx, word := range words {
        fmt.Println(idx, word)
    }
}

輸出:

0 Iron Man
1 Thor
2 Hulk
3 Dr Strange
4 Spiderman

在 Go 中使用 ...string 定義可變引數函式

引數前面的省略號 (...) 定義了可變引數函式。讓我們編寫一個程式來響應提供給函式的 Avengers 名稱。

我們設計了一個接受一個引數 namessayHello 方法。由於我們在資料型別前新增了省略號(...):...string,所以引數是一個變數。

Go 理解函式可以接受零個、一個或多個引數。

names 引數作為切片傳送到 sayHello 方法。因為資料型別是字串,names 引數可以在方法主體內處理,就像字串切片 ([]string)。

我們可以使用 range 運算子來構建一個遍歷字串切片的迴圈。

package main

import "fmt"

func main() {
    sayHello()
    sayHello("Iron Man")
    sayHello("Thor", "Hulk", "Dr Strange", "Spiderman")
}

func sayHello(names ...string) {
    for _, n := range names {
        fmt.Printf("Hello %s\n", n)
}

輸出:

Hello Iron Man
Hello Thor
Hello Hulk
Hello Dr Strange
Hello Spiderman

在 Go 中同時使用 []string...string

package main

import "fmt"

func f(args ...string) {
    fmt.Println(len(args))
    for i, s := range args {
        fmt.Println(i, s)
    }
}

func main() {
    args := []string{"Hello", "Jay"}
    f(args...)
}

輸出:

2
0 Hello
1 Jay

相關文章 - Go Slice

相關文章 - Go Variadic