可变参数函数允许接收任意数量的同类型参数,通过...T声明并作为切片处理,必须位于参数列表末尾,可结合固定参数使用,调用时用...展开切片,适用于日志、格式化等场景。
在Go语言中,可变参数函数(Variadic Functions)是一种非常实用的功能,允许函数接收任意数量的同一类型参数。这种机制常用于日志记录、字符串格式化、数学计算等场景。实现起来简单直观,但理解其底层机制和使用技巧能帮助我们写出更高效的代码。
可变参数函数是指参数数量不固定的函数。在Go中,通过在参数类型前加上...来声明可变参数。该参数在函数内部被视为切片(slice)。
例如,定义一个打印所有整数的函数:
func PrintNumbers(nums ...int) {调用时可以传入零个或多个整数:
PrintNumbers() // 不传参数可变参数必须是函数最后一个参数,这是语法规定。同时,你可以结合固定参数一起使用。
比如记录用户操作日志:
func LogAction(user string, actions ...string)
{调用示例:
LogAction("Alice", "login", "edit", "logout")输出:
User Alice performed: [login edit logout]如果你有一个切片想传递给可变参数函数,可以在调用时使用...操作符展开:
actions := []string{"open", "save", "close"}虽然可变参数使用方便,但也有一些需要注意的地方:
举个使用interface{}的例子(谨慎使用):
func PrintAll(values ...interface{}) {它可以接受混合类型的参数:
PrintAll(1, "hello", 3.14, true)可变参数广泛应用于标准库和实际项目中:
例如构建一个带选项的日志器:
type Logger struct {