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來的。但這不是強制的。