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