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 @   程序马2023  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示