Go语言 可变参数(变参函数)
合适地使用可变参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。
本文主要从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
相关推荐
Lzs 2020-10-23
聚合室 2020-11-16
零 2020-09-18
Justhavefun 2020-10-22
ChaITSimpleLove 2020-10-06
周游列国之仕子 2020-09-15
afanti 2020-09-16
88234852 2020-09-15
YClimb 2020-09-15
风雨断肠人 2020-09-04
卖口粥湛蓝的天空 2020-09-15
stulen 2020-09-15
pythonxuexi 2020-09-06
abfdada 2020-08-26
梦的天空 2020-08-25