Golang 包管理
在一个项目里,若是想引用本地包,常常会把新手搞的莫名其妙。这里通俗记录一下。golang
首先先要知道几个默认的规则函数
- 必须定义环境变量GOPATH,GOPATH能够定义多个目录
- 全部项目代码都在${GOPATH}/src下面
- 新建一个项目NewProject则其目录为${GOPATH}/src/NewProject
例如NewProject项目目录以下:
-${GOPATH}/src
-NewProject
-main.go
-mypackage
-A.go
源文件main.gocode
package main
import (
"fmt"
"NewProject/mypackage"
)
func main() {
fmt.Println("hello")
fmt.Println(B.GetString())
}
源文件A.gostring
package B
//GetString return string
func GetString() string {
return "package B"
}
总结一下自定义包引用规则:import
- 自定义的包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来的。但这不是强制的。