Calvert's murmur

安裝、設定 Golang 的 GOPATH 和 Go 工作區

2019-11-01

約 5154 字 / 需 28 分鐘閱讀

原文:CalliCoderGolang Installation, Setup, GOPATH, and Go Workspace

Go 是 Google 建立的開源、靜態型別的編譯語言。

它結合了靜態型別和動態型別語言的優點,並為你提供了有效率和輕鬆撰寫程式的完美組合。它主要適合用於快速建立、高效能和可靠的伺服器端應用程式。

以下是 Go 最著名的功能:

  • 安全:型別安全及記憶體安全

  • 對並發和通訊的良好支援

  • 高效能且無延遲的垃圾回收

  • 編譯快速

  • 卓越的工具支援

這是我們 Go 教學系列的第一部份。在本文中,你將學到如何在系統中安裝 Go,以及如何為 Go 專案設定開發環境。

安裝 Go

Go 二進位發行版適用於所有主要作業系統,如 Linux、Windows 和 macOS。從二進位發行版安裝 Go 非常簡單。

如果沒有適用於你的作業系統的二進位發行版,可以嘗試從原始碼安裝 Go

Mac OS X

使用 Homebrew

在 macOS 中安裝 Go 最簡單的方法是使用 Homebrew

brew install go
使用 macOS package 安裝程式

Go 的官方下載頁面下載最新的 Go 安裝程式(.pkg)。開啟安裝程式並按照畫面上的說明安裝 Go。預設情況下,Go 會安裝在 /usr/local/go 中。

Linux

Go 的官方下載頁面下載 Linux 發行版,並解壓縮到 /usr/local 目錄中。

sudo tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

接下來,將 /usr/local/go/bin 目錄加到 PATH 環境變數中。你可以透過將下面這行加到 ~/.bash_profile 檔案中來完成此操作:

export PATH=$PATH:/usr/local/go/bin

你也可以使用 /opt/go 之類的任何其他目錄代替 /usr/local 來安裝 Go。

Windows

Go 的官方下載頁面下載 Windows MSI 安裝程式。開啟安裝程式並按照畫面上的說明安裝 Go。預設情況下,Go 會安裝在 C:\Go 中。

Go 工具

Go 發行版包含了 Go 工具。它是一個命令列工具,可讓你自動執行常見任務,如下載和安裝相依套件,建置和測試程式碼等。

按照上一節中的說明安裝 Go 之後,你應該可以透過在命令列中輸入 go 來執行 Go 工具

$ go
Go is a tool for managing Go source code.

Usage:

    go command [arguments]

The commands are:

    build       compile packages and dependencies
    clean       remove object files
    doc         show documentation for package or symbol
    env         print Go environment information
    bug         start a bug report
    fix         run go tool fix on packages
    fmt         run gofmt on package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

    c           calling between Go and C
    buildmode   description of build modes
    filetype    file types
    gopath      GOPATH environment variable
    environment environment variables
    importpath  import path syntax
    packages    description of package lists
    testflag    description of testing flags
    testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

GOPATH、Go 工作區及程式碼組織

Go 要求你以特定方式組織程式碼:

按照慣例,你所有的 Go 程式碼和匯入的程式碼必須位於單一工作區中。工作區只是檔案系統中的目錄,其路徑儲存於環境變數 GOPATH 中。

工作區的根目錄中包含以下子目錄:

  • src: 包含 Go 原始碼檔案.

    src 目錄通常包含許多版本控制儲存庫,其中包含一個或多個 Go package。每個 Go 原始檔都屬於一個 package。通常,你會在儲存庫內為每個獨立的 Go package 建立一個新的子目錄。

  • bin: 包含執行檔.

    Go 工具會建置和安裝執行檔到這個目錄。所有想要成為可執行檔的 Go 程式都必須包含名為 main 的特殊 package 原始檔,並在名為 main() 的特殊函數中定義程式的進入點。

  • pkg: 包含 Go package 檔案(.a.

    所有不可執行的 package(共享函式庫)都儲存在此目錄中。你不能直接執行這些 package,因為他們不是可執行檔。他們通常是在其他可執行 package 中匯入和使用。

# A typical Go workspace
bin/
    myapp                           # Executable binary
    hello                           # Executable binary
pkg/
   github.com/callicoder/example/
       numbers.a                    # Package archive
       strings.a                    # Package archive
   github.com/gorilla/
       mux.a                        # Package archive
   go.uber.org/
       zap.a                        # Package archive
src/
    github.com/callicoder/example/  # Project repository
       .git/
       myapp/
          app.go                    # Executable program containing main package and function
       numbers/                     # Go Package (contains utility functions for working with numbers)
          prime.go
          prime_test.go
       strings/                     # Go Package (contains utility functions for working with strings)
          reverse.go
          trim.go
    github.com/gorilla/mux/         # 3rd Party package
       #... package contents
    go.uber.org/zap/                # 3rd Party package
       #... package contents
    hello/                          # Local package (not published anywhere)
       hello.go

    # ... (more repositories and packages omitted) ...

設定 GOPATH

GOPATH 環境變數指定了工作區的位置。預設情況下,在 Unix 系統上 GOPATH 被假定為 $HOME/go,在 Windows 上被假定為 %USERPROFILE%\go。如果你滿意這個路徑,則無需執行任何操作。你可以在家目錄中建立名為 go 的工作區目錄,然後開始撰寫 Go 程式碼。

如果想要使用自訂位置作為工作區,你可以按照以下說明設定 GOPATH 環境變數:

Unix 系統(Linux 和 macOS)

在 Bash shell 中設定 GOPATH,將下面一行加到 ~/.bash_profile 檔案中:

export GOPATH=$HOME/go

如果你使用 Zsh shell,那麼你需要將上面一行加到 ~/.zshrc 檔案中。

Windows 系統

假設你要將工作區目錄放置在 C:\go-workspace。以下是設定 GOPATH 環境變數以使用此工作區位置的方法:

  • C:\go-workspace 建立工作區資料夾。

  • Right click on Start → click Control Panel → Select System and Security → click on System.

  • From the menu on the left, select the Advanced systems settings.

  • Click the Environment Variables button at the bottom.

  • Click New from the User variables section.

  • Type GOPATH into the Variable name field.

  • Type C:\go-workspace into the Variable value field.

  • Click OK.

注意,GOPATH 必須與 Go 安裝路徑不同。

使用 Hello World 程式測試 Go 是否正確安裝

首先,確定已經在 $HOME/go 建立了 Go 工作區目錄。接下來,在工作區中建立一個新目錄 src/hello。最後,使用以下程式碼建立一個名為 hello.go 的檔案:

package main

import "fmt"

func main() {
	fmt.Printf("Hello, World\n")
}
$ cd $HOME/go/src/hello
$ ls
hello.go

執行以上程式最簡單的方法是使用 go run 指令:

$ go run hello.go
Hello, World

使用 go build 建置執行檔

go run 指令會編譯和執行程式一次。但是,如果你想從 Go 原始碼產生一個執行檔,可以在不使用 Go 工具的情況下將其作為獨立的可執行檔來執行,則可以使用 go build 指令:

$ cd $HOME/go/src/hello
$ go build
$ ls
hello hello.go

go build 指令會建立一個名稱與 package(hello)相同的可執行檔。你可以像這樣執行它:

$ ./hello
Hello, World

使用 go install 安裝 package 到 bin 目錄中

你可以使用 go install 指令來建置並安裝執行檔到工作區的 bin 目錄:

$ cd $HOME/go/src/hello
$ go install
$ cd $HOME/go/bin
$ ls
hello
$ ./hello
Hello, World

你也可以將 $HOME/go/bin 目錄加到 PATH 變數,以便從任何位置執行 go 可執行檔。

別忘了查看:go help rungo help buildgo help install

結論

希望你能深入研究並進一步了解 Go 程式語言,你可以從 Golang 分類中找到所有用 Go 撰寫的教學。

Tags: Golang