init())函数和main()函数
init()函数和main()函数
1.这两个函数都是go语言中的保留函数。init()用于初始化信息,main()用于作为程序的入口
2.这两个函数定义的时候:不能有参数,返回值。只能由go程序白动调用,不能被引用。
3.init()函数可以定义在任意的包中,可以有多个。main()函数只能在main包下,并且只能有一个.
4.执行顺序
A:先执行init(0函),后执行main()函致
B:对于同一个go文件中,调用顺序是从上到下的,也就是说,先写的先被执行,后写的后被执行
C:对于同一个包下,将文件名按照字符串进行排序,之后顺序调用各个文件中init()函政
D:对于不同包下,
如果不存在依赖,按照main包中import的顺序来调用对应包中init()函数
如果存在依籁,最后被依赖的最先被初始化
导入顺序: main>A>B>C 执行顺序:C>B>A>main
5.存在依算的包之间,不能循环导入
6.—个包可以彀其他多个包import,但是只能狻初始化一次。
代码实例目录结构如下:
calc_test在goland中要以package MyProject\pingguoxueyuan\gostudy\listen11\calc_test运行,或者build之后才能运行
它验证了init执行顺序问题和全局变量修改问题
MyProject/pingguoxueyuan/gostudy/listen11/calc_test/main.go
点击查看代码
package main
import (
"MyProject/pingguoxueyuan/gostudy/listen11/calc"
//_ "MyProject/pingguoxueyuan/gostudy/listen11/calc_test"
"fmt"
)
func main(){
sum = calc.Add(3,5)
fmt.Printf("sum=%d\n",sum)
}
func init(){
fmt.Println("init func in main.go 002",a,b)
fmt.Printf("init func in main.go 002 &a=%p &b=%p\n",&a,&b)
}
func init(){
a = 11
b = 12
fmt.Println("init func in main.go 003",a,b)
fmt.Printf("init func in main.go 003 &a=%p &b=%p\n",&a,&b)
}
var a int = 10
var b int = 20
MyProject/pingguoxueyuan/gostudy/listen11/calc_test/test.go
点击查看代码
package main
import "fmt"
var (
sum int
)
func init(){
fmt.Println("打死了富家大室",a,b)
fmt.Printf("init3 func in main.go &a=%p &b=%p\n",&a,&b)
fmt.Println("init3 func in main.go")
}
MyProject/pingguoxueyuan/gostudy/listen11/calc/calc.go
点击查看代码
package calc
import "fmt"
var (
Sum int
)
func Add(a int, b int)int{
return a + b
}
func init(){
fmt.Println("MyProject/pingguoxueyuan/gostudy/listen11/calc/calc.go>>>>001",)
}
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!