go `...` 不定长(可选)参数

简介: go `...` 不定长(可选)参数

go ...是什么?

不定长(可选)参数

在Go语言中,... 是一种特殊的语法,通常被称为"variadic"参数,用于处理可变数量的参数。它有以下两个主要的用途:

  1. 函数参数中的可变参数: 使用...语法可以在函数定义时指定接受可变数量参数的函数。这些参数被表示为一个切片类型。


func myFunc(args ...int) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}
  1. 在上面的例子中,args ...int 表示 myFunc 函数接受任意数量的整数参数,并将它们作为一个 int 类型的切片。
  2. 函数调用中的展开参数: 通过在切片、数组或者函数参数后加上...,可以将这个切片或数组展开成一个个单独的参数传递给函数。


nums := []int{1, 2, 3, 4, 5}
fmt.Println(sum(nums...)) // 将切片展开成单独的参数传递给 sum 函数

在这个例子中,sum(nums...) 将会把切片 nums 中的元素依次传递给 sum 函数。

总的来说,... 在Go中用于处理可变数量的参数,无论是在函数定义时还是在函数调用时。

为什么要使用 go ...不直接使用 []切片类型

在许多情况下,使用[]int来接收参数是完全合适的,但是有时使用...语法会更加方便和灵活。

考虑以下情况:

  1. 函数调用时参数数量不确定: 如果函数的参数数量在调用时是不确定的,使用...语法可以让函数更加灵活,不需要预先定义一个切片。


func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}
  1. 在这个例子中,sum函数接受任意数量的整数参数,并计算它们的总和。如果使用[]int,则需要先创建一个切片,然后再将切片作为参数传递给函数。
  2. 展开参数更加方便: 当你已经有一个切片时,使用...语法可以方便地将切片的内容作为参数传递给函数,而无需手动遍历切片。


nums := []int{1, 2, 3, 4, 5}
fmt.Println(sum(nums...)) // 将切片展开成单独的参数传递给 sum 函数

这种方式更简洁,使代码更易读。

因此,尽管在某些情况下使用[]int是合适的,但在需要处理可变数量参数的情况下,使用...语法通常更为便捷和灵活。


相关文章
|
2天前
|
Go
Go语言中的默认参数和可选参数详解
【2月更文挑战第22天】
151 2
|
2天前
|
存储 Go
Go 语言函数、参数和返回值详解
函数是一组语句,可以在程序中重复使用。函数不会在页面加载时自动执行。函数将通过调用函数来执行。
80 0
|
2天前
|
Go 数据处理
Go杂记1-切片Slice作为函数参数那点事儿
Go杂记1-切片Slice作为函数参数那点事儿
7 0
|
2天前
|
供应链 算法 安全
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
|
2天前
|
存储 测试技术 Go
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
|
7月前
|
Go
Go 语言怎么使用变长参数函数?
Go 语言怎么使用变长参数函数?
29 0
|
2天前
|
中间件 Go
go 打印gin 中的c.Request的参数
在 Gin 框架中,可以通过 `c.Request` 获取请求对象,从而访问请求的参数。以下是一个示例,展示如何打印出 `c.Request` 中的参数: ```go package main import ( "fmt" "github.com/gin-gonic/gin" ) func LoggerMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // 打印请求方法和路径 fmt.Printf("开始处理请求: %s %s\n", c.Request.Method, c.Request.URL.Pa
|
5月前
|
Cloud Native Go C语言
GO 语言如何用好变长参数?
GO 语言如何用好变长参数?
GO 语言如何用好变长参数?
|
7月前
|
搜索推荐 中间件 Go
Go语言微服务框架 - 11.接口的参数校验功能-buf中引入PGV
大量开发接口的朋友会经常遇到**接口参数校验**的问题。举个例子,我们希望将某个字段是必填的,如`name`,我们经常会需要做两步: 1. 在程序中加一个**判断逻辑**,当这个字段为空时返回错误给调用方 2. 在接口文档中加上**注释**,告诉调用方这个参数必填 一旦某项工作被拆分为两步,就很容易出现**不一致性**:对应到参数检查,我们会经常遇到文档和具体实现不一致,从而导致双方研发的沟通成本增加。那么,今天我将引入一个方案,实现两者的一致性。
59 0
|
Go C语言 云计算
Go语言的可变(不定长)参数函数
一般情况一个函数的传入参数都是固定的,但是有一些函数能传入不定数量的参数(可变长的)。比如c语言中的printf。可以看:《C语言“…”占位符及可变参数函数》 在Go语言中,也有这样的函数。用法类似,也是三个点。
5446 0