日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

GOPATH与工作空间

發(fā)布時(shí)間:2025/3/21 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GOPATH与工作空间 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前面我們?cè)诎惭bGo的時(shí)候看到需要設(shè)置GOPATH變量,Go從1.1版本到1.7必須設(shè)置這個(gè)變量,而且不能和Go的安裝目錄一樣,這個(gè)目錄用來(lái)存放Go源碼,Go的可運(yùn)行文件,以及相應(yīng)的編譯之后的包文件。所以這個(gè)目錄下面有三個(gè)子目錄:src、bin、pkg

從go 1.8開(kāi)始,GOPATH環(huán)境變量現(xiàn)在有一個(gè)默認(rèn)值,如果它沒(méi)有被設(shè)置。 它在Unix上默認(rèn)為$HOME/go,在Windows上默認(rèn)為%USERPROFILE%/go。

GOPATH設(shè)置

go 命令依賴一個(gè)重要的環(huán)境變量:$GOPATH

Windows系統(tǒng)中環(huán)境變量的形式為%GOPATH%,本書(shū)主要使用Unix形式,Windows用戶請(qǐng)自行替換。

(注:這個(gè)不是Go安裝目錄。下面以筆者的工作目錄為示例,如果你想不一樣請(qǐng)把GOPATH替換成你的工作目錄。)

在類似 Unix 環(huán)境大概這樣設(shè)置:

export GOPATH=/home/apple/mygo

為了方便,應(yīng)該新建以上文件夾,并且上一行加入到?.bashrc?或者?.zshrc?或者自己的?sh?的配置文件中。

Windows 設(shè)置如下,新建一個(gè)環(huán)境變量名稱叫做GOPATH:

GOPATH=c:\mygo

GOPATH允許多個(gè)目錄,當(dāng)有多個(gè)目錄時(shí),請(qǐng)注意分隔符,多個(gè)目錄的時(shí)候Windows是分號(hào),Linux系統(tǒng)是冒號(hào),當(dāng)有多個(gè)GOPATH時(shí),默認(rèn)會(huì)將go get的內(nèi)容放在第一個(gè)目錄下。

以上 $GOPATH 目錄約定有三個(gè)子目錄:

  • src 存放源代碼(比如:.go .c .h .s等)
  • pkg 編譯后生成的文件(比如:.a)
  • bin 編譯后生成的可執(zhí)行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個(gè)gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)

以后我所有的例子都是以mygo作為我的gopath目錄

代碼目錄結(jié)構(gòu)規(guī)劃

GOPATH下的src目錄就是接下來(lái)開(kāi)發(fā)程序的主要目錄,所有的源碼都是放在這個(gè)目錄下面,那么一般我們的做法就是一個(gè)目錄一個(gè)項(xiàng)目,例如: $GOPATH/src/mymath 表示mymath這個(gè)應(yīng)用包或者可執(zhí)行應(yīng)用,這個(gè)根據(jù)package是main還是其他來(lái)決定,main的話就是可執(zhí)行應(yīng)用,其他的話就是應(yīng)用包,這個(gè)會(huì)在后續(xù)詳細(xì)介紹package。

所以當(dāng)新建應(yīng)用或者一個(gè)代碼包時(shí)都是在src目錄下新建一個(gè)文件夾,文件夾名稱一般是代碼包名稱,當(dāng)然也允許多級(jí)目錄,例如在src下面新建了目錄$GOPATH/src/github.com/astaxie/beedb 那么這個(gè)包路徑就是"github.com/astaxie/beedb",包名稱是最后一個(gè)目錄beedb

下面我就以mymath為例來(lái)講述如何編寫(xiě)應(yīng)用包,執(zhí)行如下代碼

cd $GOPATH/src mkdir mymath

新建文件sqrt.go,內(nèi)容如下

// $GOPATH/src/mymath/sqrt.go源碼如下: package mymathfunc Sqrt(x float64) float64 {z := 0.0for i := 0; i < 1000; i++ {z -= (z*z - x) / (2 * x)}return z }

這樣我的應(yīng)用包目錄和代碼已經(jīng)新建完畢,注意:一般建議package的名稱和目錄名保持一致

編譯應(yīng)用

上面我們已經(jīng)建立了自己的應(yīng)用包,如何進(jìn)行編譯安裝呢?有兩種方式可以進(jìn)行安裝

1、只要進(jìn)入對(duì)應(yīng)的應(yīng)用包目錄,然后執(zhí)行g(shù)o install,就可以安裝了

2、在任意的目錄執(zhí)行如下代碼go install mymath

安裝完之后,我們可以進(jìn)入如下目錄

cd $GOPATH/pkg/${GOOS}_${GOARCH} //可以看到如下文件 mymath.a

這個(gè).a文件是應(yīng)用包,那么我們?nèi)绾芜M(jìn)行調(diào)用呢?

接下來(lái)我們新建一個(gè)應(yīng)用程序來(lái)調(diào)用這個(gè)應(yīng)用包

新建應(yīng)用包mathapp

cd $GOPATH/src mkdir mathapp cd mathapp vim main.go

$GOPATH/src/mathapp/main.go源碼:

package mainimport ("mymath""fmt" )func main() {fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) }

可以看到這個(gè)的package是main,import里面調(diào)用的包是mymath,這個(gè)就是相對(duì)于$GOPATH/src的路徑,如果是多級(jí)目錄,就在import里面引入多級(jí)目錄,如果你有多個(gè)GOPATH,也是一樣,Go會(huì)自動(dòng)在多個(gè)$GOPATH/src中尋找。

如何編譯程序呢?進(jìn)入該應(yīng)用目錄,然后執(zhí)行g(shù)o build,那么在該目錄下面會(huì)生成一個(gè)mathapp的可執(zhí)行文件

./mathapp

輸出如下內(nèi)容

Hello, world. Sqrt(2) = 1.414213562373095

如何安裝該應(yīng)用,進(jìn)入該目錄執(zhí)行g(shù)o install,那么在$GOPATH/bin/下增加了一個(gè)可執(zhí)行文件mathapp, 還記得前面我們把$GOPATH/bin加到我們的PATH里面了,這樣可以在命令行輸入如下命令就可以執(zhí)行

mathapp

也是輸出如下內(nèi)容

Hello, world. Sqrt(2) = 1.414213562373095

這里我們展示如何編譯和安裝一個(gè)可運(yùn)行的應(yīng)用,以及如何設(shè)計(jì)我們的目錄結(jié)構(gòu)。

獲取遠(yuǎn)程包

go語(yǔ)言有一個(gè)獲取遠(yuǎn)程包的工具就是go get,目前go get支持多數(shù)開(kāi)源社區(qū)(例如:github、googlecode、bitbucket、Launchpad)

go get github.com/astaxie/beedb

go get -u 參數(shù)可以自動(dòng)更新包,而且當(dāng)go get的時(shí)候會(huì)自動(dòng)獲取該包依賴的其他第三方包

通過(guò)這個(gè)命令可以獲取相應(yīng)的源碼,對(duì)應(yīng)的開(kāi)源平臺(tái)采用不同的源碼控制工具,例如github采用git、googlecode采用hg,所以要想獲取這些源碼,必須先安裝相應(yīng)的源碼控制工具

通過(guò)上面獲取的代碼在我們本地的源碼相應(yīng)的代碼結(jié)構(gòu)如下

$GOPATHsrc|--github.com|-astaxie|-beedbpkg|--相應(yīng)平臺(tái)|-github.com|--astaxie|beedb.a

go get本質(zhì)上可以理解為首先第一步是通過(guò)源碼工具clone代碼到src下面,然后執(zhí)行g(shù)o install

在代碼中如何使用遠(yuǎn)程包,很簡(jiǎn)單的就是和使用本地包一樣,只要在開(kāi)頭import相應(yīng)的路徑就可以

import "github.com/astaxie/beedb"

程序的整體結(jié)構(gòu)

通過(guò)上面建立的我本地的mygo的目錄結(jié)構(gòu)如下所示

bin/mathapp pkg/平臺(tái)名/ 如:darwin_amd64、linux_amd64mymath.agithub.com/astaxie/beedb.a src/mathappmain.gomymath/sqrt.gogithub.com/astaxie/beedb/beedb.goutil.go

從上面的結(jié)構(gòu)我們可以很清晰的看到,bin目錄下面存的是編譯之后可執(zhí)行的文件,pkg下面存放的是應(yīng)用包,src下面保存的是應(yīng)用源代碼

總結(jié)

以上是生活随笔為你收集整理的GOPATH与工作空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。