8 函数

  • 函数是组织好的、可重复使用的、用于执行指定任务的代码块

  • Go 中支持函数、匿名函数和闭包,并且函数在Go中属于”一等公民”

函数定义

  • 具体格式:

    • ```go
      func 函数名(参数)(返回值){

      函数体
      

      }

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12

      * **函数名**:*字母、数字、下划线*组成。在**同一个包内**,函数名不能重复
      * **参数**:由 *参数变量和参数变量* 的类型组成,多个参数使用**逗号**隔开
      * **返回值**:由 *返回值变量和其类型* 组成,也**可以只写返回值类型**,**多个返回值必须用`()`包裹**,并用逗号隔开
      * **函数体**:实现指定功能的代码块

      * 示例:

      * ```go
      func intSum(x int, y int) int {
      return x +y
      }
    • 函数的参数和返回值都是可选的

函数的调用

  • 定义函数后,使用函数名()调用函数
  • 调用有返回值的函数时,可以不接收其返回值

参数

类型简写

  • 函数参数列表 中,若相邻变量的参数相同,则可以省略左边的类型
    *
1
2
3
func intSum(x, y int) int{
return x+y
}

可变参数

  • 可变参数:函数的参数数量不固定

    • 在参数列表中加...标识

    • 前面一个变量是切片

    • ```go
      func intSum(x … int) int{

      //x是一个切片
      sum := 0
      for _,v := range x{
          sum += v
      }
      return sum
      

      }

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15



      * 调用仅含有可变参数的函数时:可有0或多个变量

      * 固定参数 搭配可变参数时,可变参数放在固定参数后:

      * ```go
      func intSum(x int, y ... int) int{
      sum := x
      for _,v := range y{
      sum += v
      }
      return sum
      }
  • 调用含有混合型的参数时,必须要有固定参数

  • 本质上,可变参数通过切片实现

返回值

  • Go 中通过关键字return向外输出返回值

多返回值

  • Go 支持多返回值,必须用()将所有返回值包裹起来

    • ```go
      func calc(x,y int) (int,int){
      return x+y,x-y
      
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13



      #### 返回值命名

      * 函数定义时, 可以给返回值命名,并在函数体内直接使用,最后只需要`return `关键字返回

      * ```go
      func calc(x,y int) (sum,sub int){
      sum = x+y
      sub = x-y
      return
      }

返回值补充

  • 当一个函数的返回值类型为 切片 时,nil可看作一个有效的 切片,没必要显示长度为零的切片