码迷,mamicode.com
首页 > 其他好文 > 详细

Go - 函数/方法 的 变参

时间:2016-11-16 02:18:24      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:string   列表   test   ack   操作   scala   内置函数   数据   range   

变参 本质上就是一个切片。只能接收一个或多个同类型参数,且 必须放在参数列表的 尾部

func test(s string, a ...int) {
    fmt.Printf("%T, %v\n", a, a) // 显示类型 和 值
}

func main() {
    test("abc", 1, 2, 3, 4)
}

输出:

[]int, [1, 2, 3, 4]

将切片作为变参时,须进行 展开操作(后面加“...”)。如果是数组,先将其转换为切片。

func test(a ...int) {
    fmt.Println(a)
}

func main() {
    a := [3]int{10, 20, 30}
    test(a[:]...)
}

既然变参是切片,那么参数复制的仅是切片自身,并不包括底层数组,也因此可修改原数据。如果需要,可用内置函数 copy(), 复制底层数据。

func test(a ...int) {
    for i := range a {
        a[i] += 100
    }
}

func main() {
    a := []int{10, 20, 30}
    test(a...)
    
    fmt.Println(a)
}

输出:

[110 120 130]

Go - 函数/方法 的 变参

标签:string   列表   test   ack   操作   scala   内置函数   数据   range   

原文地址:http://www.cnblogs.com/52php/p/6067782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!