聊聊Go工做空間

前言

對於剛開始學Go的同窗,可能會對幾個概念比較迷糊:GOROOTGOPATH,今天就來聊聊它們。 執行go env,給你們看下我開發環境的相關參數配置(部分):git

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

這個比較好理解,GOROOT表示的是go語言編譯、工具、標準庫等的安裝路徑(好比:/usr/local/go),簡而言之,就是安裝路徑,GO安裝好以後就有了。github

GOPATH

(畫重點) 可自定義路徑的工做空間-workspace,Go1.7以前必須設置這個變量,且不可以與Go的安裝目錄相同。1.8以後,GOPATH有默認值--$HOME/go。能夠執行go env GOPATH查看,從上面能夠看到,個人GOPATH是/Users/chengguilu/goProjects。其實,說白了,GOPATH對應計算機的一個目錄。 做用:用來存放Go代碼,Go的可運行文件,以及相應的編譯以後的包文件。 Go代碼必須放在工做空間內,workspace目錄包含三個子目錄架構

  • src 存放Go源代碼,它們被組織成包(每一個目錄都對應一個包)
  • pkg 存放編譯後生成的文件,好比:.a文件(靜態庫文件)
  • bin 存放編譯後的可執行文件

咱們能夠經過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學習

go install
經過命令行 $GOPATH/bin/hello來運行( $GOPATH請自行替換)
還有一種更簡便的方法,直接執行可執行文件,不過這須要將 $GOPATH/bin 添加到 PATH 中。

你的第一個庫

編寫一個庫,並讓hello程序來調用它。 在$GOPATH/src下建立包目錄github.com/Seekload/stringutil 測試

以後,在該目錄中建立的文件 reverse.go並保存(文件看不懂不要緊,隨着學習深刻,相關知識點都會講到,這裏只作演示使用):

package stringutil
// Reverse 將其實參字符串以符文爲單位左右反轉。
func Reverse(s string) string {
	r := []rune(s)
	for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
		r[i], r[j] = r[j], r[i]
	}
	return string(r)
}
複製代碼

目錄如圖: ui

go build 命令來測試該包的編譯:

go build github.com/Seekload/stringutil
複製代碼

也能夠在包目錄下直接執行go build。 這個命令不會產生輸出文件。想要輸出的話,必須使用 go install 命令,它會將編譯以後的靜態文件放到工做空間的 pkg 目錄中。 spa

確認 stringutil包構建完畢後,修改原來的 hello.go 文件並使用它:

package main

import (
	"fmt"
	"github.com/Seekload/stringutil"
)

func main() {
	fmt.Println(stringutil.Reverse("!oG ,daolkeeS"))
}
複製代碼

執行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語言中的包。.net


(全文完)

原創文章,若需轉載請註明出處!
歡迎掃碼關注公衆號「Golang來啦」或者移步 seekload.net ,查看更多精彩文章。

公衆號「Golang來啦」給你準備了一份神祕學習大禮包,後臺回覆【電子書】領取!

公衆號二維碼
相關文章
相關標籤/搜索