一.init函数
基本介绍
每个源文件都可以包含一个init函数,该函数会在main函数执行前,被go运行框架调用,也就是说init会在main函数前被调用
//案例演示
package main
import "fmt"
func init () {
fmt.Println("init...")
}
func main() {
fmt.Println("main...")
}
执行结果:
细节讨论:
1.如果一个文件同时包含全局变量定义,init函数,main函数,则执行流程是:全局变量定义->init函数->main函数
2.init函数最主要的作用,就是完成一些初始化工作,案例如下:
3.如果main.go和utils.go都含有变量定义,init函数,main函数时,执行流程是什么?
2.匿名函数
基本介绍
如果某个函数只是希望用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用
package main
import "fmt"
var (
//Fun1就是一个全局匿名函数
Fun1 = func(n1 int, n2 int) int {
return n1 * n2
}
)
func main() {
//匿名函数使用方式1:在定义匿名函数时就直接调用,这种方式的匿名函数只能使用一次
//案例:求两数的和,使用匿名函数方式完成
res := func(n1 int, n2 int) int {
return n1 + n2
}(10, 5)
fmt.Println("res=", res)
//匿名函数使用方式2:将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数,该方式的匿名函数可以调用多次
//案例:将匿名函数func(n1 int, n2 int) int赋给变量a,则a的数据类型就是函数类型,此时可以通过a完成调用
a := func(n1 int, n2 int) int {
return n1 + n2
}
res2 := a(10, 20)
fmt.Println("res2=", res2)
res3 := a(20, 30)
fmt.Println("res3=", res3)
//全局匿名函数:如果将一个匿名函数赋给一个全局变量,那么这个匿名函数,就变成了一个全局匿名函数,可以在该程序所有地方进行调用
//全局匿名函数额使用
res4 := Fun1(11, 3)
fmt.Println("res4=", res4)
}