golang包管理 一、GOPATH GOPATH: 進行golang開發時的工作空間,你編寫的go源代碼和編譯後生成的可執行程式都將存放在GOPATH下。註意,GOPATH只是一個普通的文件目錄並且你所有的編碼工作都應該在該目錄下完成(golang 1.11版本引入 包依賴管理工具go mod,可 ...
golang包管理
一、GOPATH
GOPATH:進行golang開發時的工作空間,你編寫的go源代碼和編譯後生成的可執行程式都將存放在GOPATH下。註意,GOPATH只是一個普通的文件目錄並且你所有的編碼工作都應該在該目錄下完成(golang 1.11版本引入 包依賴管理工具go mod,可以在GOPATH以外編寫go程式)。
配置GOPATH:首先創建一個目錄C:\go(windows),$HOME/go(linux),該目錄將作為GOPATH;GOPATH的目錄結構如下:
bin:存放編譯後的可執行文件。
src:存放GO程式源碼,它們被組織成包(每個目錄都對應一個包)。
pkg:包對象。
在環境變數中配置GOPATH:
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
註意:GOPATH可以包含多個目錄,這些目錄不能和go的安裝目錄相同。
二、包導入
go程式的第一行語句必須是 package pkgname
package hello // hello 為包名
go中的包名稱通常以一個全小寫的單詞(縮寫)命名(如fmt),為了自己的包名稱不和go標準庫中的包名稱重名,對於你自己的包必須要選擇一個基本路徑。例如你有一個fmt的包,那你必須選擇一個基本路徑example.com/user/,才不會和標準庫中的fmt衝突。go官方推薦使用github.com/user做為包的基本路徑(user為github賬號名)。go文件中的包名稱(package pkgname)為go源文件所在文件夾(包)的最後一級文件夾名。
註意:對於可執行文件的包名必須為main。
package main
例子:
定義一個自己的go庫:
在GOPATH/src下創建一個包github.com/user/hello(如果使用go mod init 可以在任意位置創建包):
# golang 1.11前 GOPATH模式
$ mkdir $GOPATH/src/github.com/user/hello
$ cd $GOPATH/src/github.com/user/hello
# golang 1.11後 go mod模式
$ mkdir $HOME/github.com/user/hello
$ go mod init github.com/user/hello # 創建一個模塊(項目)
在hello目錄(包)下創建hello.go:
package hello // 包名稱,包名稱為go源文件所在文件夾(包)的最後一級文件夾名
import (
"fmt"
)
func Hello() {
fmt.Println("hello world")
}
執行go命令:
$ go build github.com/user/hello # 將會去GOPATH/src尋找github.com/user/hello
使用自定義的庫:
在GOPATH/src下創建一個包github.com/user/test:
$ mkdir $GOPATH/src/github.com/user/test
$ cd $GOPATH/src/github.com/user/test
在test目錄(包)下創建test.go
package main // 包名稱
import (
"fmt"
"github.com/KillerTwo/hello" // 導入自定義包
)
func main() {
hello.Hello() // 調用hello包中的Hello()
}
執行go命令:
$ go install /github.com/user/test # 將會去GOPATH/src尋找github.com/user/test
該命令將會在$GOPATH/bin 下生成可執行文件(二進位文件)test。
運行可執行文件:
$ hello
# 輸出: hello world
對於golang包管理官方文檔有很好的介紹和例子,本文只是自己看官方文檔的簡單總結,如有寫的不清楚的地方請看官方文檔(https://golang.google.cn/doc/code.html#Command)。