社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
原文发布在我的个人博客 入坑Go语言(二) | 以太空间
想学习Golang,包肯定是绕不过去的,就像C语言的标准库,这篇文章里,我将为大家介绍关于Go语言包机制的使用、注意事项和原理
package遵循以下原则:
1. package
是最基本的分发单位和工程管理中依赖关系的体现
2. 每个Go语言源代码文件开头都必须要有一个package
声明,表示源代码文件所属包
3. 要生成Go语言可执行程序,必须要有名为main
的package
包,且在该包下必须有且只有一个main
函数
4. 同一个路径下只能存在一个package
,一个package
可以由多个源代码文件组成
按照我个人的理解,一个目录就是一个包,该目录下的所有文件必须属于同一个包。
再来看看多文件的Package
// File: main.go
package main
import "fmt"
func learn() {
fmt.Println("I am learning.")
}
func main() {
fmt.Println("----main start ----")
learn()
eat()
fmt.Println("----main end ----")
}
// File: eat.go
package main
import "fmt"
func eat() {
fmt.Println("I am eating.")
}
在命令行编译一下,然后执行
$ go build . # 会在当前目录生成名为`go`的执行文件
$ ./go
结果输出
----main start ----
I am learning.
I am eating.
----main end ----
import
语句的唯一作用就是导入源码文件所依赖的包,而且导入的包必须在源码文件里用到,否则会报错(在VS Code里如果输入一个没有导入的包函数,VS Code会自动导入)
import
的写法有两种格式,我个人更倾向于第二种
import "package1"
import "package2"
import "package3"
improt (
"package1",
"package2",
"package3"
)
跟package
类似,import
原理遵守以下几个原则:
main
导入其他的包,包会被顺序导入pkg1
)依赖其他的包(包pkg2
),会首先导入pkg2
,然后初始化pkg2
中的常量与变量,如果pkg2中有init函数,会自动执行initmain
的常量和变量进行初始化,然后执行main
中的init
函数(如果有的话),最后执行main
函数关于上面第三条规的import
多重依赖的流程如下图所示
import iii "fmt"
// 此处省略一些代码...
iii.Println("hello")
如果别名是.
的话,则可以这样调用(一般不建议这样使用)
import . "fmt"
// 此处省略一些代码...
Println("hello")
有一个最特别的情况,如果别名是
_
的话,表示只注册该包(初始化全局常量和变量,且执行其init函数),并不会实际引入该包。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!