golang 变长参数

在golang开发中,按照参数的传递方式有两种值传递和引用传递,按照参数的个数有定长参数和变长参数,掌握参数的不同类型在开发过程中有很大的作用。

参数

按值传递

Go 语言默认使用按值传参来传递参数,也就是传递参数值的一个副本:函数接收到传递进来的参数后,会将参数值拷贝给声明该参数的变量(也叫形式参数,简称形参),如果在函数体中有对参数值做修改,实际上修改的是形参值,这不会影响到实际传递进来的参数值(也叫实际参数,简称实参)。

引用传递

如果你想要实现在函数中修改形参值可以同时修改实参值,需要通过引用传参来完成,此时传递给函数的参数是一个指针,而指针代表的是实参的内存地址,修改指针引用的值即修改变量内存地址中存储的值,所以实参的值也会被修改(这种情况下,传递的是变量地址值的拷贝,所以从本质上来说还是按值传参):

由于引用类型(slice、map、interface、channel)自身就是指针,所以这些类型的值拷贝给函数参数,函数内部的参数仍然指向它们的底层数据结构。

变长参数

  • 一个函数的最后一个参数可以是一个变长参数;
  • 一个函数可以最多有一个变长参数;
  • 一个变长参数的类型总为一个切片类型。
func (values ...int64) (sum int64) 
func (sep string, tokens ...string) string
举例
func sum(args ...interface{}) {
  res := 0
  for _, v := range args {
    res += v.(int)
  }
  fmt.Println(res)
}

func main() {
  num := []int{1, 2, 3}
  sum(num...)
}
golang 快速排序
标签:

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

ajax-loader