W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
該文的設(shè)置已過時,請查看這里獲取新的設(shè)置方式
前面我們在安裝Go的時候看到需要設(shè)置GOPATH變量,Go從1.1版本開始必須設(shè)置這個變量,而且不能和Go的安裝目錄一樣,這個目錄用來存放Go源碼,Go的可運(yùn)行文件,以及相應(yīng)的編譯之后的包文件。所以這個目錄下面有三個子目錄:src、bin、pkg
go 命令依賴一個重要的環(huán)境變量:$GOPATH
Windows系統(tǒng)中環(huán)境變量的形式為%GOPATH%
,本書主要使用Unix形式,Windows用戶請自行替換。
(注:這個不是Go安裝目錄。下面以筆者的工作目錄為示例,如果你想不一樣請把GOPATH替換成你的工作目錄。)
在類似 Unix 環(huán)境大概這樣設(shè)置:
export GOPATH=/home/apple/mygo
為了方便,應(yīng)該把新建以上文件夾,并且把以上一行加入到 .bashrc
或者 .zshrc
或者自己的 sh
的配置文件中。
Windows 設(shè)置如下,新建一個環(huán)境變量名稱叫做GOPATH:
GOPATH=c:\mygo
GOPATH允許多個目錄,當(dāng)有多個目錄時,請注意分隔符,多個目錄的時候Windows是分號,Linux系統(tǒng)是冒號,當(dāng)有多個GOPATH時,默認(rèn)會將go get的內(nèi)容放在第一個目錄下。
以上 $GOPATH 目錄約定有三個子目錄:
${GOPATH//://bin:}/bin
添加所有的bin目錄)以后我所有的例子都是以mygo作為我的gopath目錄
GOPATH下的src目錄就是接下來開發(fā)程序的主要目錄,所有的源碼都是放在這個目錄下面,那么一般我們的做法就是一個目錄一個項(xiàng)目,例如: $GOPATH/src/mymath 表示mymath這個應(yīng)用包或者可執(zhí)行應(yīng)用,這個根據(jù)package是main還是其他來決定,main的話就是可執(zhí)行應(yīng)用,其他的話就是應(yīng)用包,這個會在后續(xù)詳細(xì)介紹package。
所以當(dāng)新建應(yīng)用或者一個代碼包時都是在src目錄下新建一個文件夾,文件夾名稱一般是代碼包名稱,當(dāng)然也允許多級目錄,例如在src下面新建了目錄$GOPATH/src/github.com/astaxie/beedb 那么這個包路徑就是"github.com/astaxie/beedb",包名稱是最后一個目錄beedb
下面我就以mymath為例來講述如何編寫應(yīng)用包,執(zhí)行如下代碼
cd $GOPATH/src
mkdir mymath
新建文件sqrt.go,內(nèi)容如下
// $GOPATH/src/mymath/sqrt.go源碼如下:
package mymath
func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
這樣我的應(yīng)用包目錄和代碼已經(jīng)新建完畢,注意:一般建議package的名稱和目錄名保持一致
上面我們已經(jīng)建立了自己的應(yīng)用包,如何進(jìn)行編譯安裝呢?有兩種方式可以進(jìn)行安裝
1、只要進(jìn)入對應(yīng)的應(yīng)用包目錄,然后執(zhí)行go install
,就可以安裝了
2、在任意的目錄執(zhí)行如下代碼go install mymath
安裝完之后,我們可以進(jìn)入如下目錄
cd $GOPATH/pkg/${GOOS}_${GOARCH}
//可以看到如下文件
mymath.a
這個.a文件是應(yīng)用包,那么我們?nèi)绾芜M(jìn)行調(diào)用呢?
接下來我們新建一個應(yīng)用程序來調(diào)用這個應(yīng)用包
新建應(yīng)用包mathapp
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
$GOPATH/src/mathapp/main.go
源碼:
package main
import (
"mymath"
"fmt"
)
func main() {
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}
可以看到這個的package是main
,import里面調(diào)用的包是mymath
,這個就是相對于$GOPATH/src
的路徑,如果是多級目錄,就在import里面引入多級目錄,如果你有多個GOPATH,也是一樣,Go會自動在多個$GOPATH/src
中尋找。
如何編譯程序呢?進(jìn)入該應(yīng)用目錄,然后執(zhí)行go build
,那么在該目錄下面會生成一個mathapp的可執(zhí)行文件
./mathapp
輸出如下內(nèi)容
Hello, world. Sqrt(2) = 1.414213562373095
如何安裝該應(yīng)用,進(jìn)入該目錄執(zhí)行go install
,那么在$GOPATH/bin/下增加了一個可執(zhí)行文件mathapp, 還記得前面我們把$GOPATH/bin
加到我們的PATH里面了,這樣可以在命令行輸入如下命令就可以執(zhí)行
mathapp
也是輸出如下內(nèi)容
Hello, world. Sqrt(2) = 1.414213562373095
這里我們展示如何編譯和安裝一個可運(yùn)行的應(yīng)用,以及如何設(shè)計(jì)我們的目錄結(jié)構(gòu)。
go語言有一個獲取遠(yuǎn)程包的工具就是go get
,目前go get支持多數(shù)開源社區(qū)(例如:github、googlecode、bitbucket、Launchpad)
go get github.com/astaxie/beedb
go get -u 參數(shù)可以自動更新包,而且當(dāng)go get的時候會自動獲取該包依賴的其他第三方包
通過這個命令可以獲取相應(yīng)的源碼,對應(yīng)的開源平臺采用不同的源碼控制工具,例如github采用git、googlecode采用hg,所以要想獲取這些源碼,必須先安裝相應(yīng)的源碼控制工具
通過上面獲取的代碼在我們本地的源碼相應(yīng)的代碼結(jié)構(gòu)如下
$GOPATH
src
|--github.com
|-astaxie
|-beedb
pkg
|--相應(yīng)平臺
|-github.com
|--astaxie
|beedb.a
go get本質(zhì)上可以理解為首先第一步是通過源碼工具clone代碼到src下面,然后執(zhí)行go install
在代碼中如何使用遠(yuǎn)程包,很簡單的就是和使用本地包一樣,只要在開頭import相應(yīng)的路徑就可以
import "github.com/astaxie/beedb"
通過上面建立的我本地的mygo的目錄結(jié)構(gòu)如下所示
bin/
mathapp
pkg/
平臺名/ 如:darwin_amd64、linux_amd64
mymath.a
github.com/
astaxie/
beedb.a
src/
mathapp
main.go
mymath/
sqrt.go
github.com/
astaxie/
beedb/
beedb.go
util.go
從上面的結(jié)構(gòu)我們可以很清晰的看到,bin目錄下面存的是編譯之后可執(zhí)行的文件,pkg下面存放的是應(yīng)用包,src下面保存的是應(yīng)用源代碼
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: