以Python作为对比,在Python中如果要使用自己写的库,该库可以在当前或当前子目录下,假设在当前目录下,你需要在当前目录下新建一个__init__.py
的空文件,这样在当前目录下的工作文件中可以使用import xxx
导入自己写的库。Go的package关键字定义该文件所属包,然后使用import关键字调用包。
以实例讲解,首先有如下的目录结构,当前在GOLANG目录下,learn.go是主文件,GOLANG下面有一个say的文件夹,say文件夹下有一个test.go文件
其中的learn.go文件的内容如下,正常输出Hello world!!!
//learn.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world !!!")
}
现在我想调用test.go文件内的方法。先看test.go文件内容有什么
//test.go
package say
import "fmt"
func Dog(name string) string {
fmt.Println("This is Dog function.")
return name + "is Dog"
}
package say
的say是该文件所在的包目录。里面的Dog函数的首字母一定要大写,因为go规定了首字母大写才能暴露到外部,否则learn.go文件不能找到该函数。
那learn.go文件怎么调用呢?learn.go文件的内容如下
//learn.go
package main
import (
"GOLANG/say"
"fmt"
)
func main() {
fmt.Println("Hello world !!!")
result := say.Dog("小黑")
fmt.Println(result)
}
import "GOLANG/say"
导入,GOLANG是模块名称,后面会讲到,在这里使用当前文件所在的目录名,say是package包
好了运行一下,结果如下
learn.go:5:2: package GOLANG/say is not in GOROOT (C:\Program Files\Go\src\GOLANG\say)
报错了,说learn.go文件的第五行中GOLANG/say包没有在GOROOT环境变量目录下,到该C:\Program Files\Go\src\目录下发现有很多文件夹,那些文件夹大多是我们常使用的包,这样我们就知道了我们常用的包原来都在这里
我们回到learn.go所在的GOLANG目录下的终端,使用命令go mod init "模块名称"
,模块名称随意取,这里使用文件夹的名称
然后在GOLANG目录下就生成了一个文件go.mod
再运行一下learn.go,结果如下,运行成功
到这里就知道怎么使用package语句了,就是一个申明所属包,而import参数和Python差不多
那么go mod init
命令有没有影响了什么环境变量呢?
使用命令go env
可以查看所有关于go的环境变量,在使用go mod init
命令之前和之后,环境变量都没有变,说明该命令只是生成了一个文件,那我们可以手动创建吗?
查看生成的go.mod文件内容如下
module GOLANG
go 1.16
我们删掉go.mod文件,程序就会报错,那我们手动创建一个go.mod文件,内容相同,运行learn.go正常
我们再把go.mod文件的模块名修改,将GOLANG改为mylove
在learn.go文件中修改导入名称,程序任然正常
我们看看官方的包大概是什么形状的
到常用的fmt包下面看看
其中的print.go文件定义了很多有关I/O输入输出的方法,看看该文件,其中的部分结构如下