合适地使用可变参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。
本文主要从4个实例介绍可变参数用法。
程序代码:
package main import ( "bytes" "fmt" ) /****************** 1 **************** 定义可参变数函数 形如...type格式的类型只能作为函数的参数类型存在, 并且必须是最后一个参数,它是一个语法糖(syntactic sugar), 即这种语法对语言的功能并没有影响,但是更方便程序员使用, 通常来说,使用语法糖能够增加程序的可读性,从而减少程序出错的可能 */ 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{}) { rawPrint(slst...) } 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 1 is an int value. 234 is an int64 value. hello is an string value. 1.23 is an unknown value. ladies and gentlemen 1 3 5
原文地址:https://www.cnblogs.com/personblog/p/12319366.html
时间: 2024-10-29 04:36:38