Go语⾔可变参数(变参函数) 合适地使⽤可变参数,可以让代码简单易⽤,尤其是输⼊输出类函数,⽐如⽇志函数等。
本⽂主要从4个实例介绍可变参数⽤法。
程序代码:
package main
import (
"bytes"
"fmt"
)
/****************** 1 ****************
定义可参变数函数
形如...type格式的类型只能作为函数的参数类型存在,
并且必须是最后⼀个参数,它是⼀个语法糖(syntactic sugar),
即这种语法对语⾔的功能并没有影响,但是更⽅便程序员使⽤,
go语言字符串转数组通常来说,使⽤语法糖能够增加程序的可读性,从⽽减少程序出错的可能
*/
func myfunc(args ...int) {
for _, v := range args {
fmt.Println(v)
}
}
/****************** 2 ****************
任意类型的可变参数
⽤ interface{} 传递任意类型数据是Go语⾔的惯例⽤法,使⽤ interface{} 仍然是类型安全的
*/
func MyPrintf(args ...interface{}) {
for _, arg := range args {
switch arg.(type) {
case int:
fmt.Println(arg, "is an int value.")
case string:
fmt.Println(arg, "is an string value.")
case int64:
fmt.Println(arg, "is an int64 value.")
default:
fmt.Println(arg, "is an unknown value.")
}
}
}
/****************** 3 ****************
遍历可变参数列表——获取每⼀个参数的值
*/
func JoinStrings(slist ...string) string {
//定义⼀个字节缓冲,快速连接字符串
var b bytes.Buffer
for _, s := range slist {
//将遍历的字节字符串写⼊字节数组
b.WriteString(s)
}
//将连接好的字节数组转为字符串
return b.String()
}
func rawPrint(slst ...interface{}) {
for _, v := range slst {
fmt.Println(v)
}
}
/****************** 4 ****************
在多个可变参数函数中传递参数
如果要将这个含有可变参数的变量传递给下⼀个可变参数函数,可以在传递时给可变参数变量后⾯添加...
*/
func personPrint(slst ...interface{}) {
)
}
func main() {
//定义可参变数函数
myfunc(1, 7, 5)
var v1 int = 1
var v2 int64 = 234
var v3 string = "hello"
var v4 float32 = 1.23
//任意类型的可变参数
MyPrintf(v1, v2, v3, v4)
//遍历可变参数列表——获取每⼀个参数的值
fmt.Println(JoinStrings("ladies ", "and ", "gentlemen")) //在多个可变参数函数中传递参数
personPrint(1, 3, 5)
}
程序输出:
1
7
5
1is an int value.
234is an int64 value.
hello is an string value.
1.23is an unknown value.
ladies and gentlemen
1
3
5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论