Categories: GO编程

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...)
}
5.0
02
golang中切边和数组
golang 快速排序
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

Autojump一个linux目录快速跳转的命令工具

Linux命令行实用程序有一个…

2天 ago

Groq一款语言处理的超快AI解决方案

Groq正在AI创新的最前沿,…

2天 ago

WordUp是一个AI词汇增强应用

WordUp是一个AI驱动的词…

2天 ago

Sia一款AI学习引擎

Sia作为全球首款统一人工智能…

2天 ago

Exscientia一款药物发现AI工具

Exscientia,一家杰出…

3天 ago