9.14 Go 三个点(…)用法

众所周知,Go语言是严格类型语言,而开发的时候又遇到传入参数不定的情况,怎么办?

这里的三个点(…),就给我们编程人员带来很大的灵活性,具体如下

函数可变数量参数

可参考$zh-9.1.md

示例

  1. package main
  2. import "fmt"
  3. func main() {
  4. //multiParam 可以接受可变数量的参数
  5. multiParam("jerry", "herry")
  6. names := []string{"jerry", "herry"}
  7. multiParam(names...)
  8. }
  9. func multiParam(args ...string) {
  10. //接受的参数放在args数组中
  11. for _, e := range args {
  12. fmt.Println(e)
  13. }
  14. }

需要注意的是,可变参数是函数最右边的参数,普通参数放在左侧,可以0到n个。如

  1. package main
  2. import "fmt"
  3. func main() {
  4. //multiParam 可以接受可变数量的参数
  5. multiParam("jerry", 1)
  6. multiParam("php", 1, 2)
  7. }
  8. func multiParam(name string, args ...int) {
  9. fmt.Println(name)
  10. //接受的参数放在args数组中
  11. for _, e := range args {
  12. fmt.Println(e)
  13. }
  14. }

可变函数的参数

s如果使用s...符号解压缩切片,则可以将切片直接传递给可变参数函数。在这种情况下,不会创建新的切片。

示例

  1. package main
  2. import "fmt"
  3. func main() {
  4. //multiParam 可以接受可变数量的参数
  5. names := []string{"jerry", "herry"}
  6. multiParam(names...)
  7. }
  8. func multiParam(args ...string) {
  9. //接受的参数放在args数组中
  10. for _, e := range args {
  11. fmt.Println(e)
  12. }
  13. }

还有一种情况就是通过append合并两个slice,

  1. stooges := []string{"Moe", "Larry", "Curly"}
  2. lang := []string{"php", "golang", "java"}
  3. stooges = append(stooges, lang...)
  4. fmt.Println(stooges)//[Moe Larry Curly php golang java]

数组文字

在数组文字中,...符号指定的长度等于文字中元素的数量。

  1. stooges := [...]string{"Moe", "Larry", "Curly"}
  2. arr := [...]int{1, 2, 3}
  3. fmt.Println(len(stooges))
  4. fmt.Println(len(arr))

这里... 也可以不用。

go命令

go描述软件包列表时,命令使用三个点作为通配符。

此命令测试当前目录及其子目录中的所有软件包。

  1. $ go test ./...

参考:

https://yourbasic.org/golang/three-dots-ellipsis/

links

  • 目录
  • 上一节:
  • 下一节: