init函数

init函数介绍

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

代码示例:

package main

import "fmt"

func init() {
fmt.Println("init()...")
}
func main(){
fmt.Println("main()...")

}

Golang的init函数和匿名函数介绍_全局变量


init函数的注意事项

1,一个文件同时包含全局变量定义,init函数和main函数,执行的流程全局变量定义--init函数--main函数

package main

import "fmt"

var age = test()

func test() int {
fmt.Println("test()")
return 80
}

func init () {
fmt.Println("init()...")
}
func main(){
fmt.Println("main()...age", age)

}

Golang的init函数和匿名函数介绍_匿名函数_02

2,init函数最主要的作用,就是完成一些初始化的工作

utils包下的utils.go文件

package utils

import "fmt"
var Age int
var Name string

func init(){
fmt.Println("utils 包的 init()...")
Age = 45
Name = "jet"
}

main.go

package main

import (
"awesomeProject/exercise01/utils"
"fmt"
)

var age = test()

func test() int {
fmt.Println("test()")
return 80
}

func init () {
fmt.Println("init()...")
}
func main(){
fmt.Println("main()...age", age)
fmt.Println("Age=",utils.Age,"name",utils.Name)
}

Golang的init函数和匿名函数介绍_源文件_03

3,main.go和utils.go 都含有变量定义,init函数时,执行的流程如下:

  1. utils.go文件执行变量定义
  2. utils.go文件执行init函数
  3. main.go文件导入utils.go包,执行变量定义
  4. main.go文件执行init函数
  5. main.go文件执行main函数


匿名函数

匿名函数介绍

Golang支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用

匿名函数使用方式一

在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次

package main

import "fmt"

func main() {
res1 := func(n1 int, n2 int) int {
return n1 + n2
}(5,10)
fmt.Println("res1=",res1)
}

Golang的init函数和匿名函数介绍_全局变量_04

匿名函数使用方式二

将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数

package main

import "fmt"

func main() {
a := func (n1 int, n2 int) int {
return n1 - n2
}
res2 := a(10, 30)
fmt.Println("res2=",res2)
res3 := a(90, 30)
fmt.Println("res3=", res3)
}

Golang的init函数和匿名函数介绍_匿名函数_05

全局匿名函数

如果将匿名函数赋给一个全局变量,那么这个匿名函数,就会成为一个全局匿名函数,可以在程序有效

package main

import "fmt"

func main() {
var(
Fun1 = func(n1 int, n2 int) int {
return n1 * n2
}
)
res4 :=Fun1(6,9)
fmt.Println("res4",res4)
}

Golang的init函数和匿名函数介绍_全局变量_06