第一讲 工作区和GOPATH
此為 《極客時(shí)間&Go語言核心36講》 個(gè)人筆記,具體課程詳見極客時(shí)間官網(wǎng)。
Table of Contents generated with DocToc
- 第一講 工作區(qū)和GOPATH
- 1. 環(huán)境變量配置
- 2. 配置GOPATH的意義
- 2.1 Go語言源碼的組織方式
- 2.2 源碼安裝后的結(jié)果(歸檔文件、可執(zhí)行文件)
- 2.3 理解構(gòu)建和安裝Go程序的過程
- 3. 補(bǔ)充
- 3.1 go build命令一些可選項(xiàng)的用途和用法
- 3.2 go get
- 3.3 其他
第一講 工作區(qū)和GOPATH
1. 環(huán)境變量配置
在這個(gè)過程需要配置3個(gè)環(huán)境變量:GOROOT、GOPATH、GOBIN。
- GOROOT:Go語言安裝根目錄的路徑,也就是Go語言的安裝路徑;
- GOPATH:若干工作區(qū)目錄的路徑,是我們自己定義的工作空間;
- GOBIN:GO程序生成的可執(zhí)行文件的路徑;
2. 配置GOPATH的意義
可以把GOPATH簡單理解成Go語言的工作目錄,它的值是一個(gè)路徑,在 GOPATH指定的工作目錄下,代碼總是會(huì)保存在 $GOPATH/src 目錄下。在工程經(jīng)過go build、go install 或 go get 等指令后,會(huì)將產(chǎn)生的二進(jìn)制可執(zhí)行文件放在 $GOPATH/bin 目錄下,生成的中間緩存文件會(huì)被保存在 $GOPATH/pkg 下。
環(huán)境變量 GOPATH 指向的是一個(gè)或多個(gè)工作區(qū),每個(gè)工作區(qū)中都會(huì)有以代碼包為基本組織形式的源碼文件。
由于Go語言項(xiàng)目在其生命周期內(nèi)的所有操作(編碼、依賴管理、構(gòu)建、測(cè)試、安裝等)基本上都圍繞GOPATH和工作區(qū)進(jìn)行,所以可以拓展出其他問題:
2.1 Go語言源碼的組織方式
和大多數(shù)編程語言一樣,Go語言的源碼也是以代碼包為基本單位的。每個(gè)代碼包都會(huì)有導(dǎo)入路徑,在使用程序?qū)嶓w之前都必須導(dǎo)入其所在的代碼包,例如:
import "github.com/labstack/echo"在工作區(qū)中,一個(gè)代碼包的導(dǎo)入路徑實(shí)際上就是從src子目錄,到該包的實(shí)際存儲(chǔ)位置的相對(duì)路徑。一般情況下,Go語言的源碼文件都需要被存放在環(huán)境變量GOPATH包含的某個(gè)工作區(qū)(目錄)中的src目錄下的某個(gè)代碼包(目錄)中。
2.2 源碼安裝后的結(jié)果(歸檔文件、可執(zhí)行文件)
源碼文件通常會(huì)被放在某個(gè)工作區(qū)的src子目錄下,那么在安裝后如果產(chǎn)生了歸檔文件(xxx.a,程序編譯后生成的靜態(tài)庫文件),就會(huì)放進(jìn)該工作區(qū)的pkg子目錄;如果產(chǎn)生了可執(zhí)行文件,就會(huì)放進(jìn)該工作區(qū)的bin子目錄下。
歸檔文件的相對(duì)目錄與pkg目錄之間還有一集目錄,叫做平臺(tái)相關(guān)目錄,一般是由構(gòu)建(build)的目標(biāo)操作系統(tǒng)、下劃線和木匾計(jì)算架構(gòu)的代號(hào)組成。
2.3 理解構(gòu)建和安裝Go程序的過程
構(gòu)建使用命令go build,安裝使用命令go install,構(gòu)建和安裝代碼包的時(shí)候都會(huì)執(zhí)行編譯、打包等操作。
| 構(gòu)建 | 操作的結(jié)果文件只存在于臨時(shí)文件,這里構(gòu)建的主要意義在于檢查和驗(yàn)證 | 操作的結(jié)果文件會(huì)被搬運(yùn)到源碼文件所在的目錄中 |
| 安裝 | 先執(zhí)行構(gòu)建,然后還會(huì)進(jìn)行鏈接操作,并把結(jié)果文件搬運(yùn)到它所在工作區(qū)的pkg目錄下的某個(gè)子目錄中 | 結(jié)果文件會(huì)被搬運(yùn)到它所在工作區(qū)的bin目錄中,或者環(huán)境變量GOBIN指向的目錄中 |
3. 補(bǔ)充
3.1 go build命令一些可選項(xiàng)的用途和用法
中g(shù)o build時(shí),默認(rèn)不會(huì)編譯目標(biāo)代碼包所依賴的那些代碼包,除非它依賴的代碼包的歸檔文件不存在,或者(被依賴代碼包的)源碼文件有了變化,同時(shí),還可以可以使用-a來強(qiáng)制編譯。另外,如果不但要編譯依賴的代碼包,還要安裝它們的歸檔文件,可以使用-i。
- -x:查看go build命令具體都執(zhí)行了哪些操作;
- -n:查看操作而不執(zhí)行;
- -v:查看go build命令編譯的代碼包名稱;
3.2 go get
go get會(huì)自動(dòng)從一些主流代碼庫下載目標(biāo)代碼,并把它們安裝到環(huán)境變量GOPATH包含的第一個(gè)工作區(qū)的相應(yīng)目錄中。如果存在環(huán)境變量GOBIN,那么僅包含命令源碼文件的代碼包會(huì)被安裝到GOBIN指向的那個(gè)目錄。
- -u:下載并安裝代碼包,無論工作區(qū)是否已經(jīng)存在它們;
- -d:只下載代碼包,但不安裝;
- -fix:下載代碼包后,先運(yùn)行一個(gè)修正代碼的工具,然后再安裝;
- -t:下載并測(cè)試所需的代碼包;
- -insecure:允許通過非安全的網(wǎng)絡(luò)協(xié)議下載和安裝代碼包;(例如:http…)
3.3 其他
-
Go語言在多個(gè)工作區(qū)中查找依賴包的時(shí)候是以怎樣的順序進(jìn)行的?
根據(jù)GOPATH從上到下查找。
-
如果多個(gè)工作區(qū)中存在導(dǎo)入路徑相同的代碼包會(huì)產(chǎn)生沖突嗎?
不會(huì),代碼包上根據(jù)GOPATH從上到下查找,找到即可停止,先找到哪個(gè)就用哪個(gè)。
總結(jié)
以上是生活随笔為你收集整理的第一讲 工作区和GOPATH的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手游问道法宝怎么获得
- 下一篇: 第二讲 命令源码文件