Golang 包管理简介
Golang 包管理
在一个项目里,如果想引用本地包,经常会把新手搞的莫名其妙。这里通俗记录一下。
首先先要知道几个默认的规则
- 必须定义环境变量GOPATH,GOPATH可以定义多个目录
- 所有项目代码都在${GOPATH}/src下面
- 新建一个项目NewProject则其目录为${GOPATH}/src/NewProject
例如NewProject项目目录如下:
-${GOPATH}/src
-NewProject
-main.go
-mypackage
-A.go
源文件main.go
package main
import (
"fmt"
"NewProject/mypackage"
)
func main() {
fmt.Println("hello")
fmt.Println(B.GetString())
}
源文件A.go
package B
//GetString return string
func GetString() string {
return "package B"
}
总结一下自定义包引用规则:
- 自定义的包B不一定要和其所在文件A.go名字一样
- 自定义的包B不一定要和其所在目录mypackage名字一样
- 目录mypackage下不管有多少文件,这些文件都必须属于同一个包,也就是相当于一个文件夹定义一个包
示例里包B在文件夹${GOPATH}/src/NewProject/mypackage下,意味着改文件夹下的文件都要声明package B
- 其他文件(main.go)内导入(import)包时,import里写从{GOPATH}/src开始到最终那个包所在文件夹的相对路径,
示例里包所在文件夹是${GOPATH}/src/NewProject/mypackage,从{GOPATH}/src开始,后面就是NewProject/mypackage,因此引用是要import "NewProject/mypackage"
- 其他文件(main.go)内使用包时,直接使用包名加函数名/类型名
调用函数时就直接B.GetString()
- 一般地,因为一个文件夹定义一个包,我们会把包名起地跟文件夹名一致
否则像示例里,直接调用包B时会显得很奇怪,不能直接看出来它是从哪里import来的。但这不是强制的。