Software engineering notes

Go Installation

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

在家目錄下建立 go, 將外部套件與原始程式分離

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

export GOPATH=/Users/lij/go
export GOROOT=/usr/local/go
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\test.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編譯器 :