天天看點

【Go入門教程1】Go 安裝,GOROOT,GOPATH,Go工作空間

Windows 安裝

通路 Golang Code 下載下傳頁,32 位請選擇名稱中包含 windows-386 的 msi 安裝包,64 位請選擇名稱中包含 windows-amd64 的。下載下傳好後運作,預設安裝目錄為 C:\Go\,我選擇安裝到 D:\Go\Go。安裝完成後預設會在環境變量 Path 後添加 Go 安裝目錄下的 bin 目錄 D:\Go\Go\bin\,并添加環境變量 GOROOT,值為 Go 安裝根目錄 D:\Go\Go 。

右鍵桌面“計算機”-> 選擇“屬性”-> 進階系統設定 -> 環境變量 -> 系統變量

GOROOT

D:\Go\Go

GOPATH

D:\Go\GoProjects

Path

D:\Program Files\Git\cmd;D:\Program Files\Git\bin;%GOROOT%\bin;%GOPATH%\bin;

在指令行中,輸入 go version 測試一下。

Liunx/Mac 安裝

預設安裝到 /usr/local/go (Windows系統:C:\Go)

配置下環境變量:

同樣,在控制台中輸入 go version 測試一下。

前面我們在安裝Go的時候看到需要設定GOPATH變量,Go從1.1版本開始必須設定這個變量,而且不能和Go的安裝目錄一樣,這個目錄用來存放Go源碼,Go的可運作檔案,以及相應的編譯之後的封包件。是以這個目錄下面有三個子目錄:src、bin、pkg

GOPATH設定

go 指令依賴一個重要的環境變量:$GOPATH

Windows系統中環境變量的形式為 <code>%GOPATH%</code>,本書主要使用Unix形式,Windows使用者請自行替換。

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

在類似 Unix 環境大概這樣設定:

為了友善,應該建立以上檔案夾,并且上一行加入到 <code>.bashrc</code> 或者 <code>.zshrc</code> 或者自己的 <code>sh</code> 的配置檔案中。

Windows 設定如下,建立一個環境變量名稱叫做GOPATH:

GOPATH允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候Windows是分号,Linux系統是冒号,當有多個GOPATH時,預設會将 go get 的内容放在第一個目錄下。

以上 $GOPATH 目錄約定有三個子目錄:

src 存放源代碼(比如:.go .c .h .s等)

pkg 編譯後生成的檔案(比如:.a)

bin 編譯後生成的可執行檔案(為了友善,可以把此目錄加入到 $PATH 變量中,如果有多個gopath,

那麼使用 <code>${GOPATH//://bin:}/bin </code>添加所有的bin目錄)

環境檔案:~/.bash_profile 的内容如下:

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

GOPATH下的src目錄就是接下來開發程式的主要目錄,所有的源碼都是放在這個目錄下面,那麼一般我們的做法就是一個目錄一個項目,例如: $GOPATH/src/mymath 表示mymath這個應用包或者可執行應用,這個根據package是main還是其他來決定,main的話就是可執行應用,其他的話就是應用包,這個會在後續詳細介紹package。

是以當建立應用或者一個代碼包時都是在src目錄下建立一個檔案夾,檔案夾名稱一般是代碼包名稱,當然也允許多級目錄,例如在src下面建立了目錄$GOPATH/src/github.com/astaxie/beedb 那麼這個包路徑就是"github.com/astaxie/beedb",包名稱是最後一個目錄beedb

下面我就以mymath為例來講述如何編寫應用包,執行如下代碼

建立檔案sqrt.go,内容如下

這樣我的應用包目錄和代碼已經建立完畢,注意:一般建議package的名稱和目錄名保持一緻

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

1、隻要進入對應的應用包目錄,然後執行 <code>go install</code>,就可以安裝了

2、在任意的目錄執行如下代碼 <code>go install mymath</code>

安裝完之後,我們可以進入如下目錄

這個.a檔案是應用包,那麼我們如何進行調用呢?

接下來我們建立一個應用程式來調用這個應用包

建立應用包 mathapp

<code>$GOPATH/src/mathapp/main.go</code>源碼:

可以看到這個的package是<code>main</code>,import裡面調用的包是<code>mymath</code>,這個就是相對于<code>$GOPATH/src</code>的路徑,如果是多級目錄,就在import裡面引入多級目錄,如果你有多個GOPATH,也是一樣,Go會自動在多個<code>$GOPATH/src</code>中尋找。

如何編譯程式呢?進入該應用目錄,然後執行<code>go build</code>,那麼在該目錄下面會生成一個mathapp的可執行檔案

輸出如下内容

如何安裝該應用,進入該目錄執行<code>go install</code>,那麼在$GOPATH/bin/下增加了一個可執行檔案mathapp, 還記得前面我們把<code>$GOPATH/bin</code>加到我們的PATH裡面了,這樣可以在指令行輸入如下指令就可以執行

也是輸出如下内容

這裡我們展示如何編譯和安裝一個可運作的應用,以及如何設計我們的目錄結構。

go語言有一個擷取遠端包的工具就是<code>go get</code>,目前go get支援多數開源社群(例如:github、googlecode、bitbucket、Launchpad)

go get -u 參數可以自動更新包,而且當go get的時候會自動擷取該包依賴的其他第三方包

通過這個指令可以擷取相應的源碼,對應的開源平台采用不同的源碼控制工具,例如github采用git、googlecode采用hg,是以要想擷取這些源碼,必須先安裝相應的源碼控制工具

通過上面擷取的代碼在我們本地的源碼相應的代碼結構如下

$GOPATH   src    |--github.com           |-astaxie               |-beedb    pkg     |--相應平台          |-github.com                |--astaxie                     |beedb.a

go get本質上可以了解為首先第一步是通過源碼工具clone代碼到src下面,然後執行<code>go install</code>

在代碼中如何使用遠端包,很簡單的就是和使用本地包一樣,隻要在開頭import相應的路徑就可以

通過上面建立的我本地的mygo的目錄結構如下所示

bin/     mathapp pkg/     平台名/ 如:darwin_amd64、linux_amd64          mymath.a          github.com/               astaxie/                    beedb.a src/           main.go     mymath/           sqrt.go     github.com/            astaxie/                 beedb/                     beedb.go                     util.go

從上面的結構我們可以很清晰的看到,bin目錄下面存的是編譯之後可執行的檔案,pkg下面存放的是應用包,src下面儲存的是應用源代碼

摘自:

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.md

延伸閱讀:

如何安裝 第三方 Go 離線包?

1、下載下傳 Go二進制源碼包(無須編譯,解壓即可使用)

https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz

2、解壓到目錄 /usr/local/go/go-1.7.5

3、配置環境變量

在(檔案末)追加以下文本