Go- 可变参数函数
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/3bfcad5be32570949fab84e84】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
函数可变参数
可变参数传参
空接口 interface{}
代码示例可以直接运行
package main
import (
"fmt"
)
func main() {
num := min(1, 2, 3, 4, 5) // 变长整型传递参数
fmt.Println(num)
slice := []int{6, 7, 8, 9}
num = min(slice...) // 变长整型传递slice
fmt.Println(num)
printStr1("Hi", "Guys") // 可变参数函数内调用可变参数函数
/*
可变参数中的参数类型不同时,使用默认的空接口 interface{}
*/
printVar(5, "Good", 3.1415926, false)
/*
以下代码块编译错误:use of .(type) outside type switch
*/
//var x int
//fmt.Println(x.(type))
}
/*
获得参数中的最小值
*/
func min(s ...int) int {
if len(s) == 0 {
return 0
}
num := s[0]
for _, val := range s {
if val < num {
num = val
}
}
return num
}
func printStr1(s ...string) {
printStr2(s...) // 函数形参为可变参数
printStr3(s) // 函数形参为切片
}
func printStr2(s ...string) {
for _, str := range s {
fmt.Println("printStr2: " + str)
}
}
func printStr3(s []string) {
for _, str := range s {
fmt.Println("printStr3: " + str)
}
}
func printVar(vars ...interface{}) {
for _, v := range vars {
switch v.(type) {
case int:
fmt.Println("int: ", v)
case string:
fmt.Println("string: ", v)
case float64:
fmt.Println("float64: ", v)
case bool:
fmt.Println("bool: ", v)
}
}
}
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/3bfcad5be32570949fab84e84】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
还未添加个人签名 2018.09.20 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论