函数一共有几个特征需要掌握:
- Main
- init
- import
- 执行的顺序
先说main函数。main函数只能在pacakge main中。是主函数的入口。有且只能有一个。什么意思呢?
举个列子,在Python中,定义了非常多的函数
//Python
def funa():
pass
def funb():
pass
那么,如何调用这些函数呢?对,就是if__name__= "main":
//Python
if__name__= "__main__":
resulta = funa ()
resultb = funb ()
而main函数在GO语言中作用,就是python中的if__name__= "main":
init函数
init函数不局限在package main中,可以定义在不同的package中,一个package可以有1个或者多个init函数。但是建议一个package定义1个init函数-
import
这时是不是会有疑问:定义了package a, package b, 那么在main函数中,如何将其引入呢?类似于把大象装进冰箱用几步3.1 用Import 方法,将package a,b...z导入
import (
"GOPATH"/packagea
"GOROOT/packagea"
"html://github..../packagea"
)
并且在main函数中调用
a.Run("this is packageA")
- 执行的顺序
在package main中,按照顺序进行调用
例如
Package Tree:
$GOPATH= C:\Users\abcd\go
C:\Users\abcd\go\src\awesomeProject1
main.go //main.go在根目录下
-package //第一层目录
-helloworld.go //package mypackage所在目录
helloworld.go的内容
package mypackage
import ("fmt")
var I int
func init(){
I=0
fmt.Println("Call mypackage init1")
}
func init(){
I=1
fmt.Println("Call mypackage init2")
}
main.go的内容
package main
import (
_ "awesomeProject1/package"
"fmt"
)
func main(){
fmt.Println("\"Hello go.... I = \", mypackage.I")
}
Call mypackage init1
Call mypackage init2
"Hello go.... I = ", mypackage.I
Process finished with exit code 0
不白piao网上的一张图。有知识产权的哦

image.png
当我在编译main.go的时候,需要引用mypackage。这时,当我使用
"awesomeProject1/package"的时候,点GO之后,这一条就消失了。。。
原因就是当编译的过程中,func main()函数或者其他地方并没有对mypackage进行引用!!
因此,这里在"awesomeProject1/package"前面加了"_",表示声明,但不引用。

image.png