-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46583
- shell命令
-
- 文章:(42)篇
- 阅读:154313
- Git教程
-
- 文章:(36)篇
- 阅读:234926
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131960
-
go语言中三个点"..."的用法2018-03-01 18:52 阅读(6237) 评论(0)
一、简介
"..."是go语言中的一种语法糖。从内部实现机制上来说,类型 ...type ,本质上是一个数组切片,也就是 []type。如下:
func getSum(args ... int) (int){ var sum = 0; for _, arg := range args { sum += arg } return sum } //调用方式,如下: var a, b, sum int a = 10 b = 15 sum = getSum(a,b)
当然,若用切片实现如下:
func getSum(args []int) (int){ var sum = 0; for _, arg := range args { sum += arg } return sum } //调用方式 var a, b, sum int a = 10 b = 15 sum = getSum([]int{a, b})
可以看出,虽然切片可以实现相同的效果,但是没有 ...这种语法糖看着简洁。
前三个点与后三个点有什么区别呢?
形参的参数前的三个点,表示可以传0到多个参数
变量后三个点表示将一个切片或数组变成一个一个的元素,即打散.如下:
arr := []int{23,454, 6} show1(arr...) func show1( x ... int) { fmt.Println(x) }
二、使用
1、函数的不定参数
任意类型的不定参
指定类型为 interface{},类似go语言的fmt.Printf()函数的原型:
func Print(format string, args ...interface()) {
}
interface{}是类型安全的。
比如计算多个整数的和
func getSum(args ... int) (int){ var sum = 0 for _, arg := range args { sum += arg } return sum } var sum int = getSum(14,15, 16)