Go 中 []String 和 ...String 的區別
Jay Singh
2023年1月30日
2022年4月22日
陣列部分稱為切片。與陣列相比,切片提供了更多的功能、靈活性和便利性。
切片是可索引的並且有長度,就像陣列一樣。與陣列不同,它們可以擴充套件。
切片是一種資料結構,它定義了陣列的連續部分,並與切片變數分開儲存。
陣列與切片不同。陣列的切片是它的子集。
本文將討論 Go 中 []string
和 ...string
之間的區別。
在 Go 中使用 []string
定義切片
在這個例子中,我們使用了 for
和 range
命令來遍歷一組單詞。
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
名稱。
我們設計了一個接受一個引數 names
的 sayHello
方法。由於我們在資料型別前新增了省略號(...
):...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