Go 函数

本文将介绍 Go 中函数的定义及特点。

一、函数定义

1
2
3
func 函数名([参数列表]) [返回值列表] {
// 函数体
}

需要注意的是:

  • 在 Go 中,函数可以返回多个值

    通常我们会利用这一特性处理异常:

    1
    2
    3
    4
    res, err := fun()
    if err != nil {
    // 异常处理
    }
  • 返回值写明返回值类型,可以写明返回值变量名

二、函数是一等公民

在 Go 中,函数是一等公民,既可以作为参数,也可以作为返回值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func getFunc(f func()) {
f()
}

func returnFunc() func() {
return func() {
println("I am a function")
}
}

func main() {
// 将函数作为参数
getFunc(func() {
println("hello world")
})

// 将函数作为返回值
f := returnFunc()
f()
}

三、闭包

因为 Go 中作用域、函数作为返回值的特性,可以实现闭包。

1
2
3
4
5
6
7
8
func getSequence() func() int {
i := 0

return func() int {
i += 1
return i
}
}

四、init 和 main

1. init

  • 可以出现在所有的 package 下
  • 可以在一个 package 中出现多次
  • 没有参数和返回值

2. main

  • 只能出现在 package main 下
  • 只能出现一次
  • 没有参数和返回值

3. 执行规则

  • 所有的执行都会从 package main 开始
  • 执行 import 语句…
  • 执行包级常量和变量的初始化
  • 执行 init() 函数
  • 执行 main() 函数

参考