首页 > 编程笔记

Go语言可变参数的用法

在实际开发中,我们可能遇到一些大同小异的开发需求,函数为了兼容多种需求可能设置数量不一的参数,所以 Go 语言允许对函数设置可变参数。

可变参数是指不限制参数数量,但限制了参数的数据类型,可变参数使用 3 个点(…)表示,它以切片形式表示,切片元素是参数的数据类型,从原理分析,可变参数利用了切片的解包,可变参数的应用示例如下:
package main

import (
    "fmt"
)

func myfun(numbers ...int) {
    for _, k := range numbers {
         fmt.Printf("参数值为:%v\n", k)
    }
}

func main() {
    // 调用函数
    myfun(12, 15, 13)
    myfun(45, 44, 23, 77)
}
上述代码运行结果为:

参数值为:12
参数值为:15
参数值为:13
参数值为:45
参数值为:44
参数值为:23
参数值为:77

函数 myfun() 的参数 numbers 设为整型,在参数名后面使用 3 个点(…)即可将参数设为可变参数,整个参数 numbers 以切片形式表示,切片元素的数据类型为整型。

在函数调用过程中,可以根据实际设置参数数量,但每个参数只能设为整型,如果需要设置不同类型的参数,可以将参数的数据类型设为接口(interface)类型,示例如下:
package main

import (
    "fmt"
)

func myfun(numbers ...interface{}) {
    for _, k := range numbers {
         fmt.Printf("参数值为:%v\n", k)
    }
}

func main() {
    var s = []string{"Mary", "Tim"}
    var m = map[string]interface{}{"name": "Mary", "age": 10}
    // 调用函数
    myfun(45, "Tom", s, m)
}
上述代码将参数 numbers 设为接口(interface)类型,在调用函数 myfun() 的时候,分别使用整型、字符串、切片和集合类型的数据作为函数参数,运行结果为:

参数值为:45
参数值为:Tom
参数值为:map[age:10 name:May]

推荐阅读