函数参数与返回值

函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字 func 、函数名、参数列表、返回值、函数体和返回语句。除了main()、init()函数外,其它所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。

  1. func function_name( [parameter list] ) [return_types] {
  2. body(函数体)
  3. }

函数定义:

  • func:函数由 func 开始声明
  • function_name:函数名称,函数名和参数列表一起构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • body(函数体):函数定义的代码集合。

形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。

  1. // 这个函数计算两个int型输入数据的和,并返回int型的和
  2. func plus(a int, b int) int {
  3. // Go需要使用return语句显式地返回值
  4. return a + b
  5. }
  6. fmt.Println(plus(3,4)) //7

在plus函数中a和b是形参名3和4是调用时的传入的实数,函数返回了一个int类型的值。返回值也可以像形式参数一样被命名。在这种情况下,每个返回值被声明成一个局部变量,并根据该返回值的类型,将其初始化为0。 如果一个函数在声明时,包含返回值列表,该函数必须以 return语句结尾,除非函数明显无法运行到结尾处。例如函数在结尾时调用了panic异常或函数中存在无限循环。

  1. 注意:GO中包内的函数,类型和变量的对外可见性(可访问性)由函数名,类型和变量标示符首字母决定,大写对外可见,小写对外不可见
  2. 概括来说: 公有函数的名字以大写字母开头;私有函数的名字以小写字母开头

你可能会偶尔遇到没有函数体的函数声明,这表示该函数不是以Go实现的。这样的声明定义了函数标识符。

  1. package math
  2. func Sin(x float64) float //implemented in assembly language

那么函数在使用的时候如何被调用呢?

  1. package.Function(arg1, arg2, …, argn)

Function 是 pack 包里面的一个函数,括号里的是被调用函数的实参(argument):这些值被传递给被调用函数的形参(parameter)。函数被调用的时候,这些实参将被复制然后传递给被调用函数。函数一般是在其他函数里面被调用的,这个其他函数被称为调用函数(calling function)。函数能多次调用其他函数,这些被调用函数按顺序行,理论上,函数调用其他函数的次数是无穷的(直到函数调用栈被耗尽)。

在函数中有的时候可能也会遇到你要传递的参数的类型是多个(传递变长参数)如这样的函数:

  1. func patent(a,b,c ...int)

参数是采用 …type 的形式传递,这样的函数称为变参函数.