init函数

基本介绍

每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前执行,被Go运行框架调用。

  1. // main/main.go 文件
  2. package main
  3. import "fmt"
  4. var a int = testVars()
  5. func testVars() int {
  6. fmt.Println("testVars")
  7. return 90
  8. }
  9. func init() {
  10. fmt.Println("init")
  11. }
  12. func main() {
  13. fmt.Println("main", a)
  14. }
  15. // utils-init // import包里面的init函数先执行
  16. // testVars
  17. // init
  18. // main 90
  19. // Age= 20 Name= tom
  1. // utils/utils.go 文件
  2. package utils
  3. import "fmt"
  4. var Age int
  5. var Name string
  6. func init() {
  7. Age = 20
  8. Name = "tom"
  9. fmt.Println("utils-init")
  10. }

使用细节

1、如果一个文件同时包含全局变量定义、init函数、main函数,执行流程是:
全局变量定义 -> init函数 -> main函数
2、init函数最主要的作用,就是完成一些初始化工作。
image.png

匿名函数

Go支持匿名函数,如果我们某个函数只执行一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。

使用方式

  1. 在匿名函数定义的时候,就直接调用。
  2. 将匿名函数赋值给一个变量,通过该变量调用匿名函数
  3. 全局匿名函数,将匿名函数赋值给一个全局变量,就成为了全局匿名函数 ```go // 匿名函数 res := func(n1 int, n2 int) int { return n1 + n2 }(10, 20) fmt.Println(“res=”, res) // res= 30

// 局部匿名函数变量 sub := func(n1 int, n2 int) int { return n1 - n2 } fmt.Println(“sub=”, sub(20, 10))

// 全局匿名函数 var ( fn01 = func(n1 int, n2 int) int { return n1 - n2 } fn02 = func(n1 int, n2 int) int { return n1 + n2 } ) fmt.Println(“fn01=”, fn01(20, 10)) // fn01= 10 fmt.Println(“fn02=”, fn02(20, 10)) // fn02= 30

```