结构
包
包是Go语言中的代码组织单元. 一个包由一个或者多个.go
文件组成, 这些文件通常位于同一个目录下, 并且在包声名的时候使用相同的包名: package <name>
.
Go语言中所有的import
语句导入的都是包, 而不是模块.
警告
不能同时导入两个具有相同名称的包, 会导致名称冲突. 或者使用别名导入.
main
函数
- Go编译时的入口是
main
包的main
函数 - 可以有多个文件属于
main
包但是只能有一个main
函数 - 模块中有
main
包但是找不到main
函数, 也会报错 - 不能有任何的参数和返回值, 由Go自动调用
main
函数只能用于main
包中
init
函数
init
函数可以位于任意包中init
函数是用于程序执行前做包的初始化的函数- 每个包可以有多个
init
函数 init
函数不能被其他函数调用, 而是在main
函数执行之前- 没有
main
函数的模块, 俗称"库"内的init
函数会被执行 - 不同包的
init
函数按照依赖关系决定执行顺序 - 同一个包内的
init
函数的执行顺序按照所属文件名的字典顺序依次执行 - 同一个包的同一个文件也可以有多个
init
, 按照定义顺序依次执行 - 不能有任何的参数和返回值, 由Go自动调用
模块
Go模块是Go语言的依赖管理单元, 包含一个或多个包. 每个模块由go.mod
文件定义.
在使用go get
命令时, 下载的是整个模块, 意味着会下载包含在该模块中的所有包.