Go中init函数和匿名函数

init函数:

每一个源文件中都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是init会在Main函数之前被调用。通常可以在init函数中完成初始化工作。

import "fmt"

func main() {
	fmt.Println("main函数")//后输出
}

func init() {
	fmt.Println("init方法")//先输出
}

细节说明:

  1. 如果一个文件同时包含全局变量定义,init函数和main函数,则执行的流程全局变量定义->init函数->main函数。
package main

import "fmt"

// 变量定义
var age = test()

// 为了看到全局变量先被初始化的我们这里先写一个函数
func test() int {
	fmt.Println("test函数")
	return 90
}

func main() {
	fmt.Println("main函数,age=", age)
}

func init() {
	fmt.Println("init方法")
}

//输出内容
//test函数
//init方法
//main函数,age= 90

  1. init函数最主要的作用就是完成一些初始化工作。
package utils

var Age int
var Name string

// 初始化Age和Name  这样其他文件就可以直接用其变量了
func init() {
	Age = 100
	Name = "tom"
}
  1. 如果A文件到入了B文件,都含有全局变量,init函数,那么执行流程是怎么样的?

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

使用方式1:在定义的时候就直接调用,这种方式的匿名函数只能调用一次。

package main

import "fmt"

func main() {
	//求两个数之和,匿名函数
	result := func(n1 int, n2 int) int {
		return n1 + n2
	}(10, 20)

	fmt.Println("result:", result)//30
}

使用方式2:将匿名函数赋值给一个变量,再通过该变量来调用匿名函数。

package main

import "fmt"

func main() {
    //把匿名函数赋值给变量a
	a := func(n1 int, n2 int) int {
		return n1 - n2
	}
    //注意a不是函数名,可以调用多次
	result2 := a(10, 7)
	fmt.Println("result2:", result2)//3
}

全局匿名函数:
如果我们把匿名函数赋值给一个全局变量,那么这个匿名函数就是一个全局匿名函数,可以在整个程序中有效。

package main

import "fmt"

var (
	//func1就是一个全局匿名函数
	func1 = func(n1 int, n2 int) int {
		return n1 * n2
	}
)
func main() {
    //使用全局匿名函数
    result3 := func1(4, 9)
	fmt.Println("result3:", result3) //36
}
posted @ 2024-01-15 11:04  程序马2023  阅读(33)  评论(0)    收藏  举报