Published 2020-05-23

Go - 函数

在编程中,函数是一种重要的结构,它可以用来封装一段可重复使用的代码块,接受输入参数并返回结果。函数可以提高代码的可读性、可维护性和可重用性。

在 Go 语言中,函数使用关键字 func 定义,其基本语法如下:

func 函数名(参数列表) 返回值列表 {
    函数体
}

其中,函数名是必须的,参数列表和返回值列表可以为空,函数体是函数的具体实现。

下面是一个简单的 Go 函数示例,该函数将两个整数相加并返回结果:

func add(x int, y int) int {
    return x + y
}

func main() {
    sum := add(1, 2)
    fmt.Println(sum) // 输出:3
}

在上面的示例中,add 函数接受两个参数 x 和 y,返回它们的和。在 main 函数中,我们调用 add 函数并将结果存储在 sum 变量中,然后将结果打印到控制台。

函数特性

Go 语言中的函数有以下特性:

多返回值:在 Go 中,函数可以返回多个值。这个特性可以让函数返回更多的信息,例如函数可以返回错误和结果等。下面是一个返回两个整数的最小值和最大值的函数示例:

func minMax(a, b int) (int, int) {
  if a < b {
    return a, b
  }
  return b, a
}

func main() {
  min, max := minMax(10, 20)
  fmt.Printf("最小值:%d, 最大值:%d", min, max)
}

可变参数:在 Go 中,可以定义函数接受可变数量的参数。这个特性可以方便地处理不确定数量的参数。例如下面的函数可以接受任意数量的整数并返回它们的总和:

func sum(nums ...int) int {
  res := 0
  for _, n := range nums {
    res += n
  }
  return res
}

func main() {
  s := sum(1, 2, 3)
  fmt.Println(s) // 输出:6
}

在上面的示例中,函数 sum 使用 ...int 语法表示接受任意数量的整数参数。在函数体中,我们使用循环计算参数的总和,并返回结果。

匿名函数:在 Go 中,可以使用匿名函数定义一个没有名字的函数。匿名函数可以在函数内部定义并立即调用,也可以作为其他函数的参数或返回值。例如下面的代码演示了如何在函数内部定义匿名函数:

func main() {
  add := func(x, y int) int {
    return x + y
  }
  fmt.Println(add(1, 2)) // 输出:3
}

在上面的示例中,我们使用 := 语法定义了一个匿名函数,并将其赋值给 add 变量。然后我们可以直接调用 add 函数,获取它的结果。

闭包:在 Go 中,闭包是指一个函数捕获并存储了其所在环境的变量,然后可以在函数被调用的其他地方使用这些变量。闭包在一些场景下非常有用,例如在事件处理、异步编程和单元测试中。下面是一个简单的闭包示例:

func add(x int) func(int) int {
  return func(y int) int {
    return x + y
  }
}

func main() {
  add5 := add(5)
  fmt.Println(add5(3)) // 输出:8
}

在上面的示例中,函数 add 返回了一个匿名函数,这个函数捕获了 add 函数的参数 x,然后可以在其他地方使用它。在 main 函数中,我们首先调用 add 函数,获取一个函数 add5,然后调用 add5 函数并传入参数 3,获取结果 8