golang 包結構


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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM