Jex’s Note

Golang 安裝

Linux / Mac

(最後更新: 2016-03-28)

[1] download golang source

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

Mac : https://storage.googleapis.com/golang/go1.6.darwin-amd64.tar.gz

[2] Install

Linux : sudo tar -C /usr/local -xzf go1.6.darwin-amd64.tar.gz

Mac : sudo tar -C /usr/local -xzf go1.6.darwin-amd64.tar.gz

如果要重安裝直接 remove /usr/local/go 再執行上面指令就可以了

[3] Create essential folders

在家目錄下建立 mygo, 並且將 GOPATH 指向這裡, 這是 golang 一個很重要的設定, 可以將外部套件與原始程式分離, 你還必須在 mygo 下建立 3 個資料夾, src、pkg 及 bin

  • src 是放置外部套件(go get github.com/xx/cc 會載至這裡)及開發程式的地方
  • pkg 是程式編譯時產生的 .a 檔, 一般開發可以不用理會它
  • bin 是程式編譯後產生的 binary 執行檔

.bashrc(linux) / .bash_profile(mac) :

export GOROOT=/usr/local/go
export GOPATH=$HOME/mygo
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Linux exec : source ~/.bashrc

Mac exec : source ~/.bash_profile

解壓縮完且 .bashrc 設定好以上就算安裝完成了, 可用 go version 測試是否安裝成功

Upgrade go version

  1. 移除 /usr/local/go
  2. 將官網載下來的 go 解壓縮到 /usr/local
  3. Done!
Mac upgrade go version 後還是顯示舊的版本

可能是曾經有用過 brew 安裝過 go, 即使你更新完 /usr/local/go version 還是顯示舊版的

使用 which go 可以發現它的指令是指到 /usr/local/bin/go 而它又是 link 到 /usr/local/Cellar/go/{舊版號}/bin/go

建議直接執行 brew uninstall go, 它會幫你把 /usr/local/Cellar/go 移除掉 (Uninstalling /usr/local/Cellar/go/1.7... (6,435 files, 250.6MB))

go version 後的版本就會是正常了

[註] 編譯

在本機編譯 :

go build

假如要編譯給 windows 的電腦執行 :

# 32 位元
GOOS=windows GOARCH=386 go build -o test.exe

# 64 位元
GOOS=windows GOARCH=amd64 go build -o test.exe

假如你的 project 有引入 C 程式則需要使用 CGO 來編譯 :

CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -o test.exe

windows :

go 下載頁面 按照電腦的 OS 選擇你要下載的, 下載完直接安裝

安裝好 GO 後, 還需要 GCC 編譯環境, 因為 Mac 的 Xcode 本身就有 GCC, windows 沒有, 所以選擇了 mingw 這個輕量型的 GCC

參考安裝 MinGW


設定 GOPATH, 這是放一些你自己或 go get from github 存放的地方

  1. c:\Go 下建立 mygo 資料夾, 並且在 mygo 下建立三個資料夾 src, pkg, bin
  2. 設定環境變數

GOROOT : C:\Go GOPATH : C:\Go\mygo PATH : 在最後面加上 ;%GOROOT%\bin;%GOPATH%\bin;C:\Program Files (x86)\Git\bin

除了加上 GOROOT\bin、GOPATH\bin, 也可視需求加上 git bin 的路徑

重新啟動 cmd 使變數生效


編譯本機系統 GO 的編譯環境, 直接以滑鼠點擊執行 C:\Go\src\all.bat

跑完後, 建立自定義檔名的 .bat 檔, 如 C:\Go\src\jex.bat :

set CGO_ENABLED=0
set GOARCH=386
set GOOS=windows
call make.bat --no-clean
pause

雙擊它執行

然候在 C:\Go\bin 建立自定義檔名的 .bat 檔, 如 exec.bat :

set GOARCH=386
set GOOS=windows
go build

然候新增一個 hello.go 的檔案測試

package main
import (
    "fmt"
    "bufio"
    "os"
)
func main() {
    fmt.Printf("Hello, world\n")
    bufio.NewReader(os.Stdin).ReadBytes('\n') // 在 windows 結束後讓它停留在最後一行, 不要直接關掉
}

雙擊 exec.bat, 應該會在 C:\Go\bin 下出現 bin.exe 這個可執行檔

或者是在 cmd 到 c:\Go\bin, go build hello.go

執行它如果出現 Hello, world 恭喜你~設定完成!

Hello World!

hello.go :

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world\n")
}

Package fmt implements formatted I/O with functions analogous to C’s printf and scanf. The format ‘verbs’ are derived from C’s but are simpler. Read detail

execute :

$ go run hello.go
Hello, world

編譯成執行檔

除了使用 go build 自動幫我們生成好執行檔, 我們也可以手動編譯及連結

ubuntu 手動編譯

/usr/lib/go/pkg/tool/linux_amd64/6g -o hello.6 hello.go
/usr/lib/go/pkg/tool/linux_amd64/6l -o hello hello.6
./hello

Mac 手動編譯

/usr/local/go/pkg/tool/darwin_amd64/6g -o hello.6 hello.go
/usr/local/go/pkg/tool/darwin_amd64/6l -o hello hello.6
./hello

編譯器

5g : ARM 6g : AMD 64 (x86-64) 8g : Intel 386 (X86)

386 : x86 架構的 32 位元 cpu 指令集, 簡稱 i386 AMD 64 : AMD 擴展 x86 的 64 位元指令集

[20140309] golang編譯器 :

  • 6g(X86-64)、8g(X86)、5g(arm) (及其支援工具,總稱為 gc)用 C 寫成,使用 yacc/Bison 作為解析器。Gccgo 是一個使用標準GCC作為後端的Go編譯器
  • 6g 是amd64的go編譯器,它生成的是 .6 檔案
  • 而 386 使用 8g 命令,它生成的一般是 .8 格式的檔案
  • 5g 是用於 arm 的 cpu,同理 amd64 用 6l,386 用 8l, arm 用 5l 的鏈接器!)

使用 vim 開發

必用套件vim-go

Comments