一、init 函数
1.1 基本介绍
每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前,被 Go 运行框架调用,也就是说 init 会在 main 函数前被调用。
1.2 演示
package main
import "fmt"
// init函数,通常可以在init函数中完成初始化工作func init() { fmt.Println("Init()")}
func main() { // Init() // Main() fmt.Println("Main()")}
复制代码
2.1 init 函数注意事项和细节
2.1.1 执行流程
如果一个文件同时包含全局变量定义,init 函数和 main 函数,则执行的流程是全局变量定义 >> init 函数 >> main 函数
package main
import "fmt"
// 定义全局变量var age = test()
// 测试全局变量是最先被初始化func test() int { fmt.Println("test()") return 90}
// init函数,通常可以在init函数中完成初始化工作func init() { fmt.Println("Init()")}
func main() { // test() // Init() // Main() fmt.Println("Main()")}
复制代码
2.2 init()作用
主要作用就是完成初始化工作
首先执行被引入文件中的变量定义、init 函数
package main
import ( "fmt" "go_code/chapter15/initFunc/utils")
// 定义全局变量var age = test()
// 测试全局变量是最先被初始化func test() int { fmt.Println("test()") return 90}
// init函数,通常可以在init函数中完成初始化工作func init() { fmt.Println("Init()")}
func main() { // Utils Init() // test() // Init() // Age = 18, Name = Feng // Main() fmt.Printf("Age = %v, Name = %v\n", utils.Age, utils.Name) fmt.Println("Main()")}
复制代码
二、匿名函数(没有名字的函数)
2.1 匿名函数介绍
Go 支持匿名函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用
2.2 匿名函数使用方式
2.2.1 方式 1(使用最多)
将匿名函数赋给一个变量(函数变量),再通过该变量调用该匿名函数(只能调用一次)
package main
import "fmt"
func main() {
// 在定义匿名函数时就直接调用,这种方式的匿名函数只能使用一次
// 使用匿名函数求两数的和 sum := func(n1 int, n2 int) int { return n1 + n2 }(10, 20)
// Sum = 30 fmt.Printf("Sum = %v", sum)}
复制代码
2.2.2 方式 2
将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数
package main
import "fmt"
func main() {
// 将匿名函数 func (n1 int, n2 int) int 赋给a变量 // a的数据类型就是函数类型,此时,可以通过a调用 a := func(n1 int, n2 int) int { return n1 - n2 }
result := a(10, 20) // result = -10 fmt.Println("result = ", result)}
复制代码
2.2.3 全局匿名函数
如果将一个匿名函数赋给一个全局变量,那么这个匿名函数就成为一个全局匿名函数,在整个程序中有效
package main
import "fmt"
var ( // Fun1 是一个全局匿名函数,首字母大写 Fun1 = func(n1 int, n2 int) int { return n1 * n2 })
func main() { // 调用全局匿名函数
result := Fun1(10, 10) // result = 100 fmt.Println("result = ", result)}
复制代码
评论