go-可变参数
发布时间:2020-12-16 18:30:13 所属栏目:大数据 来源:网络整理
导读:今天在尝试用go写一个简单的orm的时候 发现 在调用可变参数函数时,不是总能使用省略号将一个切片展开,有时候编译器可能会报错 再此用几个简单的例子作为说明 当不太确定数据类型的时候我们通常采用空接口 tests1(789)fmt.Println("-------------")tests1("
今天在尝试用go写一个简单的orm的时候 发现 在调用可变参数函数时,不是总能使用省略号将一个切片展开,有时候编译器可能会报错 再此用几个简单的例子作为说明 当不太确定数据类型的时候我们通常采用空接口 tests1(789) fmt.Println("-------------") tests1("789") func tests1(arg interface{}) { fmt.Println("value:",arg) fmt.Println("type:",reflect.TypeOf(arg).Name()) } 输出结果 value: 789 type: int ------------- value: 789 type: string 在使用相同类型的可变入参时 tests([]string{"4","5","6"}...) func tests(args ...string) { for i,v := range args { fmt.Println(i,"----",v) } } 输出结果 0 ---- 4 1 ---- 5 2 ---- 6 当使用interface{}作为可变入参时 func testParams(args ...interface{}) { for i,v := range args { if s,ok := v.(string); ok { fmt.Println("----",s) } if s,ok := v.([]string); ok { for i,v := range s { fmt.Println(i,"[]----",v) } } fmt.Println(i,v) } } 出现错误 cannot use []string literal (type []string) as type []interface {} in argument to testParams 当看到这里时候答案已经露出水面了 第一种方法 s := []string{"4","6"} var d []interface{} = []interface{}{s[0],s[1],s[2]} testParams(d...) 结果 ---- 4 0 4 ---- 5 1 5 ---- 6 2 6 第二种方法 s := []string{"4","6"} var d []interface{} d = append(d,s) testParams(d...) 结果 0 []---- 4 1 []---- 5 2 []---- 6 0 [4 5 6] 总结: 在使用interface{}作为可变入参时 传入的参数要做类型转换 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 实战 Groovy(3)- Groovy中的SwingBuilder 简介
- 使用VB6应用程序中的ImageList会导致Windows 7.0 64位崩溃
- java – 来自现有bean的Spring XML – 如何?
- [日常] Go语言圣经-基于select的多路复用习题
- perl – List :: MoreUtils’perg_ray()和each_arrayref()中
- Laravel中任务调度console使用方法小结
- Unity中可用Lua版本效率分析比较
- perl – 打开位于同一目录中的文件时出错
- [转]Understanding of Objects-Oriented, Classes, Instanc
- 有效的使用和设计COM智能指针——条款18:重载运算符不应当