對於剛開始學go的同學,可能會對幾個概念比較迷糊:goroot
和gopath
,今天就來聊聊它們。 執行go env
,給大家看下我開發環境的相關引數配置(部分):
goarch="amd64"
gobin="/users/chengguilu/goprojects/bin"
gocache="/users/chengguilu/library/caches/go-build"
gohostarch="amd64"
gohostos="darwin"
goos="darwin"
gopath="/users/chengguilu/goprojects"
goroot="/usr/local/go"
gotooldir="/usr/local/go/pkg/tool/darwin_amd64"
gccgo="gccgo"
cc="clang"
cxx="clang++"
複製**
這個比較好理解,goroot表示的是go語言編譯、工具、標準庫等的安裝路徑(比如:/usr/local/go
),簡而言之,就是安裝路徑,go安裝好之後就有了。
(畫重點)可自定義路徑的工作空間-workspace,go1.7之前必須設定這個變數,且不能夠與go的安裝目錄相同。1.8之後,gopath有預設值--$home/go
。可以執行go env gopath
檢視,從上面可以看到,我的gopath是/users/chengguilu/goprojects
。其實,說白了,gopath對應計算機的乙個目錄。作用:用來存放go**,go的可執行檔案,以及相應的編譯之後的包檔案。 go**必須放在工作空間內,workspace目錄包含三個子目錄
我們可以通過go工具構建原始碼包,並將其生成的二進位制檔案安裝到 pkg 和 bin 目錄中。 我們實際操練下,上一節的hello world
入門程式就按照這種方式存放。在workspace建立相關目錄src、pkg和bin,將寫好的hello.go
儲存在gopath/src/hello
目錄。
現在,我們就可以 go 工具構建並安裝hello.go
go install hello/
複製**
我們可以在系統的任一目錄中執行此命令,go 工具會根據指定的gopath,在hello/
包內查詢原始碼(下一節給大家講包的概念,現在大家了解概念就可以,不必深究)。若在包路徑下執行go install
,可以省略包路徑。go install
命令產生可執行的二進位制檔案,接著它會將該二進位制檔案安裝到工作空間的 bin 目錄中,例子中為$gopath/bin/hello
。
通過命令列$gopath/bin/hello
來執行($gopath
請自行替換)
還有一種更簡便的方法,直接執行可執行檔案,不過這需要將$gopath/bin
新增到 path 中。
你的第乙個庫
編寫乙個庫,並讓hello程式來呼叫它。 在$gopath/src
下建立包目錄github.com/seekload/stringutil
之後,在該目錄中建立的檔案
package stringutil
// reverse 將其實參字串以符文為單位左右反轉。
func
reverse
(s string)
string
return
string(r)
}複製**
目錄如圖:
用go build
命令來測試該包的編譯:
複製**也可以在包目錄下直接執行go build
。 這個命令不會產生輸出檔案。想要輸出的話,必須使用go install
命令,它會將編譯之後的靜態檔案放到工作空間的 pkg 目錄中。
確認stringutil
包構建完畢後,修改原來的 hello.go 檔案並使用它:
複製**執行go install hello/
,重新編譯hello.go
,生成可執行檔案hello
並執行:
在hello.go
中,我們引入了github.com/seekload/stringutil
包,所以重新執行go intall hello/
時,stringutil
包會被自動安裝。 注意:go install github.com/seekload/stringutil
是將stringutil.a
放到pkg/darwin_amd64
目錄中,反映出其原始碼目錄。darwin_amd64
這部分能幫助跨平台編譯,並反映出你的作業系統和架構。
這一節涉及了包的概念,有些同學可能還不太清楚。別急,將在下節給大家講解go語言中的包。
(全文完)
聊聊最近的工作
這週的工作還算順利,在我看來解決了幾個問題。但是,解問題的背後,不知我學到了什麼。總結下來,工作幾年以來,自己最擅長的就是加列印,其實就是斷點除錯。但是在安卓系統上,不知道要怎麼斷點除錯,只能一步步加列印。看出現問題的情況下 跑到了 然後修改一下判斷條件,強制讓 執行到正確的步驟。但是問題背後的真正...
聊聊 Go語言 和 PHP語言
座標上海,這 2 年網際網路行業都不景氣,大多公司都在虧損,賺錢的公司大多都是電商類脫淘的公司 2020 年不知道 php go行業就業形勢怎麼樣,大夥來吐槽吐槽討論討論,感覺現在兩級分化比較嚴重,要麼是需要初級程式設計師,要麼就是需要頂級的,擱在中間的那部分人相對比較難受。初級便宜,頂級的大公司有...
go語言的工作空間和GOPATH環境變數
go語言並沒有強制一定要使用一定的工作空間和專案結構,對於小型的go程式依靠go run等命令就可以直接編譯執行。然而,保持良好的工作空間和檔案結構,對於管理源 和發布程式都是非常有幫助的。對於大型的go語言專案,工作空間則是一定要的。go語言的工作空間其實就是乙個檔案目錄,目錄中必須包含src p...