聊聊Go工作空間

2021-09-11 14:23:36 字數 2925 閱讀 7587

對於剛開始學go的同學,可能會對幾個概念比較迷糊:gorootgopath,今天就來聊聊它們。 執行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...