Go的保留函数init和main函数

Go Hello world
原文源码等更多内容可参见:http://blog.hyrscloud.com/topic/index?id=20

准备一个main.go文件,敲入如下编码,

在main.go目录下,通过cmd敲入 go run main.go 回车即可运行

package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}
Go的保留函数init和main函数
多个文件要使用编译运行 go build

package main

import (
"fmt"
_ "golang_mainInit_Src/initmaintest1"
_ "golang_mainInit_Src/initmaintest2"
)

/*
1. main() 与 init() 两个函数在定义时不能有任何的参数和返回值,且Go程序会自动调用;
2. init() 可以应用于任意包中,且可以重复定义多个,main()函数只能用于main包,且只能定义一个;
3. 执行顺序:
a. 对于一个go文件的 init() 调用顺序是从上到下的;
b. 对于同一个package中不同文件时按文件名字符串比较 "从小到大" 顺序调用各文件中的init()函数;
c. 对于不同的package
- 如果不相互依赖:按照main()包中先import的后调用的顺序调用其包中的init();
- 如果存在依赖,则先调用最早被依赖的package中的init();
d. 最后调用main()函数,如果init()函数中使用了Println或者Print,这两个函数官方只推荐在测试环境中使用。
*/
func main() {
fmt.Println("最后调用main()函数, Hello, World!")
}

func init() {
fmt.Println("对于一个go文件的 init() 调用顺序是从上到下的---1")
}

func init() {
fmt.Println("对于一个go文件的 init() 调用顺序是从上到下的---2")
}

运行结果:

对于不同的package 如果不相互依赖:按照main()包中先import的后调用的顺序调用其包中的init(); 如果存在依赖,则先调用最早被依赖的package中的init();--1
对于不同的package 如果不相互依赖:按照main()包中先import的后调用的顺序调用其包中的init(); 如果存在依赖,则先调用最早被依赖的package中的init();--2
对于同一个package中不同文件时按文件名字符串比较 "从小到大" 顺序调用各文件中的init()函数---1
对于同一个package中不同文件时按文件名字符串比较 "从小到大" 顺序调用各文件中的init()函数---2
对于一个go文件的 init() 调用顺序是从上到下的---1
对于一个go文件的 init() 调用顺序是从上到下的---2
最后调用main()函数, Hello, World!

posted on 2020-12-07 00:12  代码练习者  阅读(83)  评论(0编辑  收藏  举报