golang

golang
https://github.com/golang/go
http://golang.org/
https://golang.org/doc/install
https://go.googlesource.com/go

官方下載:
https://golang.org/dl/
[macOS] https://storage.googleapis.com/golang/go1.7.1.darwin-amd64.pkg
[linux] https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz
[win64] https://storage.googleapis.com/golang/go1.7.1.windows-amd64.msi
[source] https://storage.googleapis.com/golang/go1.7.1.src.tar.gz

國內下載:
http://www.golangtc.com/download
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.darwin-amd64.pkg
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.darwin-amd64.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.freebsd-386.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.freebsd-amd64.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.linux-386.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.linux-amd64.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.src.tar.gz
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.windows-386.msi
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.windows-386.zip
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.windows-amd64.msi
http://www.golangtc.com/static/go/1.7rc3/go1.7rc3.windows-amd64.zip
http://pan.baidu.com/s/1hq1mrDM



----------------
安裝Go語言
----------------

方式一:利用管理工具(可能不包含go源碼或者源碼位置分開,致使工具不能使用,不建議做爲開發使用)
Homebrew (mac)
$ brew install go --cross-compile-all
$ ls `go env GOROOT`/pkg

apt-get (ubuntu)
$ apt-get install golang


方式二:官方二進制分發包(推薦)
支持平臺衆多,參見前面「國內下載」。

linux是tar.gz包手動解壓到/usr/local/:
$ sudo tar -C /usr/local -xzf go1.7rc3.linux-amd64.tar.gz

mac平臺的pkg嚮導也會將go安裝在/usr/local/
windows平臺的msi,會將GO安裝C:盤(C:\Go),而且GOPATH爲C:\Go\GOPATH,在「系統屬性 - 高級 - 環境變量」中配置它們。

爲mac和linux配置環境變量(GOROOT、PATH、GOPATH)
GOROOT
$ echo 'export GOROOT="/usr/local/go"' >> ~/.bash_profile
$ echo 'export GOROOT="/usr/local/go"' >> ~/.bashrc        # Ubuntu Desktop
$ echo 'export GOROOT="/usr/local/go"' >> ~/.zshrc         # Zsh
PATH
$ echo 'export PATH="$PATH:$GOROOT/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:$GOROOT/bin"' >> ~/.bashrc        # Ubuntu Desktop
$ echo 'export PATH="$PATH:$GOROOT/bin"' >> ~/.zshrc         # Zsh
GOPATH
用於go查找、安裝go包,可用英文冒號(windows是分號)分隔多個路徑。
$ mkdir -p $HOME/Developer/gopath
而後
$ echo 'export GOPATH="$HOME/Developer/gopath"' >> ~/.bash_profile
$ echo 'export GOPATH="$HOME/Developer/gopath"' >> ~/.bashrc        # Ubuntu Desktop
$ echo 'export GOPATH="$HOME/Developer/gopath"' >> ~/.zshrc         # Zsh
若是未來須要使用 $GOPATH/bin 中的工具,能夠將它也加入到PATH中,
或者將其中經常使用的命令建立文件軟連接到PATH指向的目錄(如/usr/local/bin)裏。

安裝完成
重啓終端(或者用source從新載入你的啓動配置文件)
$ go version        // 查看go版本
go version go1.7rc3 darwin/amd64
$ go env            // 查看go環境


例子
建立一個測試文件 hello.go,內容:
package main

import "fmt"

// main
func main() {
    fmt.Println("Hello World!")
}

$ go run hello.go
Hello World!
$ go build hello.go
$ ./hello
Hello World!


----------------
配置開發工具
----------------
使用go get安裝:
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/alecthomas/gometalinter

使用gopm代替go get
https://gopm.io/download
國內沒法下載某些包的時候,能夠在這裏得到。
而後手動複製到$GOPATH/src對應的目錄結構中,用 go install 命令安裝。
有個更方便的工具gopm:
https://github.com/gpmgo/gopm
$ go get -u github.com/gpmgo/gopm
(假設GOPATH只有一個目錄)
若是經常使用到gopm,建議建立軟連接到PATH指向的目錄,如:
$ ln -s $GOPATH/bin/gopm /usr/local/bin/gopm
不然能夠臨時設置PATH變量:
$ export PATH="$PATH:$GOPATH/bin"
C:\> start cmd /k path "%GOPATH%\bin";%PATH%
使用gopm get代替go get得到包:
(注意:其中-g表示下載包到~/.gopm/repos後拷貝到$GOPATH/src中)
gopm get -g -u -v github.com/nsf/gocode
gopm get -g -u -v github.com/rogpeppe/godef
gopm get -g -u -v github.com/golang/lint/golint
gopm get -g -u -v github.com/lukehoban/go-outline
gopm get -g -u -v sourcegraph.com/sqs/goreturns
gopm get -g -u -v golang.org/x/tools/cmd/gorename
gopm get -g -u -v github.com/tpng/gopkgs
gopm get -g -u -v github.com/newhook/go-symbols
gopm get -g -u -v golang.org/x/tools/cmd/guru
gopm get -g -u -v github.com/alecthomas/gometalinter
而後使用go install安裝包:
(注意:若是使用go get就不須要再執行一次install,可是gopm須要)
go install github.com/nsf/gocode
go install github.com/rogpeppe/godef
go install github.com/golang/lint/golint
go install github.com/lukehoban/go-outline
go install sourcegraph.com/sqs/goreturns
go install golang.org/x/tools/cmd/gorename
go install github.com/tpng/gopkgs
go install github.com/newhook/go-symbols
go install golang.org/x/tools/cmd/guru
go install github.com/nsf/gocode
go install github.com/alecthomas/gometalinter

有些包可能仍然無效(假如 goreturns),能夠到github中搜索(找到 github.com/sqs/goreturns),
而後用go get命令安裝,若是失敗,用gopm get -g加go install命令安裝它。
再不行,到 https://gopm.io/download 中搜索,手動解壓複製到 $GOPATH/src 後,go install安裝。

注:Windows下載安裝某些64位程序可能須要64位版本的gcc支持。
下載MinGW64:http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files
運行安裝嚮導,在Settings頁裏選擇Architecture爲x86_64,在Installation folder頁更改成C:\mingw-w64。
安裝完成後,將環境變量PATH中加入C:\mingw-w64\mingw64\bin
而後go-sqlite3就能被下載和正確編譯了:
C:\> go get -u -v github.com/mattn/go-sqlite3
github.com/mattn/go-sqlite3 (download)
github.com/mattn/go-sqlite3

golang tools
go get -u -v golang.org/x/tools
若是不能鏈接,能夠用github的鏡像
go get -v github.com/golang/tools
go get -v github.com/golang/net
go get -v github.com/golang/crypto
而後建立目錄在$GOPATH/golang.org/x,並將tools移動進去
mv $GOPATH/src/github.com/golang/net $GOPATH/src/golang.org/x/
mv $GOPATH/src/github.com/golang/crypto $GOPATH/src/golang.org/x/
根據godoc的介紹用go install命令安裝:https://godoc.org/golang.org/x/tools
go install golang.org/x/tools/benchmark/parse
go install golang.org/x/tools/blog
go install golang.org/x/tools/blog/atom
go install golang.org/x/tools/cmd/benchcmp
go install golang.org/x/tools/cmd/bundle
go install golang.org/x/tools/cmd/callgraph
go install golang.org/x/tools/cmd/compilebench
go install golang.org/x/tools/cmd/cover
go install golang.org/x/tools/cmd/digraph
go install golang.org/x/tools/cmd/eg
go install golang.org/x/tools/cmd/fiximports
go install golang.org/x/tools/cmd/godex
go install golang.org/x/tools/cmd/godoc
go install golang.org/x/tools/cmd/goimports
go install golang.org/x/tools/cmd/gomvpkg
go install golang.org/x/tools/cmd/gorename
go install golang.org/x/tools/cmd/gotype
go install golang.org/x/tools/cmd/goyacc
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/guru/serial
go install golang.org/x/tools/cmd/heapview
go install golang.org/x/tools/cmd/html2article
go install golang.org/x/tools/cmd/present
go install golang.org/x/tools/cmd/ssadump
go install golang.org/x/tools/cmd/stress
go install golang.org/x/tools/cmd/stringer
go install golang.org/x/tools/cmd/tip
go install golang.org/x/tools/cmd/toolstash
go install golang.org/x/tools/container/intsets
go install golang.org/x/tools/cover
go install golang.org/x/tools/go/ast/astutil
go install golang.org/x/tools/go/buildutil
go install golang.org/x/tools/go/callgraph
go install golang.org/x/tools/go/callgraph/cha
go install golang.org/x/tools/go/callgraph/rta
go install golang.org/x/tools/go/callgraph/static
go install golang.org/x/tools/godoc
go install golang.org/x/tools/godoc/analysis
go install golang.org/x/tools/godoc/redirect
go install golang.org/x/tools/godoc/static
go install golang.org/x/tools/godoc/util
go install golang.org/x/tools/godoc/vfs
go install golang.org/x/tools/godoc/vfs/gatefs
go install golang.org/x/tools/godoc/vfs/httpfs
go install golang.org/x/tools/godoc/vfs/mapfs
go install golang.org/x/tools/godoc/vfs/zipfs
go install golang.org/x/tools/go/gccgoexportdata
go install golang.org/x/tools/go/gcexportdata
go install golang.org/x/tools/go/gcimporter15
go install golang.org/x/tools/go/internal/gccgoimporter
go install golang.org/x/tools/go/loader
go install golang.org/x/tools/go/pointer
go install golang.org/x/tools/go/ssa
go install golang.org/x/tools/go/ssa/interp
go install golang.org/x/tools/go/ssa/ssautil
go install golang.org/x/tools/go/types/typeutil
go install golang.org/x/tools/go/vcs
go install golang.org/x/tools/imports
go install golang.org/x/tools/playground
go install golang.org/x/tools/playground/socket
go install golang.org/x/tools/present
go install golang.org/x/tools/refactor/eg
go install golang.org/x/tools/refactor/importgraph
go install golang.org/x/tools/refactor/rename
go install golang.org/x/tools/refactor/satisfy


備份$gopath/src(排除m2nlight目錄)
7za a -mx=9 ~/Desktop/gopath_`date +%Y-%m-%d-%H-%M-%S`_src.7z $GOPATH/src -xr\!m2nlight/
在桌面生成文件如:gopath_2016-07-31-11-26-51_src.7z


TextMate
設置中將Variables的PATH設置爲:/usr/local/bin:$PATH
用TextMate打開hello.go文件,它會提示安裝go插件,也能夠手動在
設置 - Bundles 中搜索 go 進行安裝。
按CMD+R查看編譯運行結果。


Sublime Text 3
全部擴展的配置,都是在對應的配置文件中指定GOPATH和(或)GOROOT
安裝擴展包:GoSublime、Golang Build和Golang Tools Integration
[1]配置GoSublime:
Sublime Text - Preferences - Package Settings - GoSublime - Settings User
{
    "env": {
        "GOROOT": "/usr/local/go",
        "GOPATH": "/Users/yourname/Developer/gopath"
    }
}
注意GOPATH路徑:mac是/Users/yourname,linux是/home/yourname,windows是C:\\Go\\GOPATH
windows的GOROOT路徑是C:\\Go
GoSublime技巧:按CMD+..或者Ctrl+..顯示GoSublime的快捷鍵列表。
[2]配置Golang Build:
Sublime Text - Preferences - Package Settings - Golang Config - Settings User
{
    "PATH": "/usr/local/go/bin",
    "GOROOT": "/usr/local/go",
    "GOPATH": "/Users/YOURNAME/Developer/gopath"
}
注意GOPATH路徑:mac是/Users/yourname,linux是/home/yourname,windows是C:\\Go\\GOPATH
windows的GOROOT路徑是C:\\Go,PATH路徑是C:\\Go\\bin
按CMD+B,選擇Go - Run查看結果。CMD+SHIFT+B可從新選擇編譯條件。
[3]關於Golang Tools Integration:
安裝工具:(粘貼到終端)
go get github.com/nsf/gocode
go get github.com/golang/lint/golint
go get golang.org/x/tools/cmd/guru
go get golang.org/x/tools/cmd/goimports
go get golang.org/x/tools/cmd/gorename
以及保存時格式化、代碼着色加強等。


VSCode
安裝Go擴展,若是能訪問golang,能夠用一條命令安裝所有工具:
按Ctrl+Shift+P輸入:Go:Install/Update Tools

go get -u -v github.com/nsf/gocode
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/fatih/gomodifytags
go get -u -v github.com/haya14busa/goplay/cmd/goplay
go get -u -v github.com/josharian/impl
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/godoc
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/cweill/gotests
go get -u -v github.com/derekparker/delve/cmd/dlv

go install github.com/nsf/gocode
go install github.com/uudashr/gopkgs/cmd/gopkgs
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install github.com/fatih/gomodifytags
go install github.com/haya14busa/goplay/cmd/goplay
go install github.com/josharian/impl
go install github.com/rogpeppe/godef
go install golang.org/x/tools/cmd/godoc
go install sourcegraph.com/sqs/goreturns
go install github.com/golang/lint/golint
go install github.com/cweill/gotests
go install github.com/derekparker/delve/cmd/dlv

All tools successfully installed. You're ready to Go :).

調試工具支持(可選安裝,詳細見Go擴展)
安裝delve(https://github.com/derekparker/delve/tree/master/Documentation/installation)
### mac ###
$ brew install go-delve/delve/delve
$ dlv version
Delve Debugger
Version: 0.11.0-alpha
Build: v0.11.0
注意:homebrew安裝不須要手動建立證書dlv-cert,它會被自動建立,可是刪除的時候須要手動刪除dev-cert證書:
    $ brew uninstall delve
    $ sudo security delete-certificate -t -c dlv-cert /Library/Keychains/System.keychain
### linux ###
$ go get -v github.com/derekparker/delve/cmd/dlv
$ dlv version
### windows ###
C:\> go get github.com/derekparker/delve/cmd/dlv
C:\> C:\go\gopath\bin\dlv.exe version

回到VSCode,點擊左側的調試功能,在調試窗格右上角點設置,從列表裏選擇Go
會出現launch.json配置文件,輸入配置以下:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": []
        },
        {
            "name": "Remote",
            "type": "go",
            "request": "launch",
            "mode": "remote",
            "remotePath": "${workspaceRoot}",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": []
        }
    ]
}
以上配置了兩個調試功能,Launch和Remote
以Remote爲例
在工做目錄運行遠程調試命令:
$ dlv debug --headless --listen=:2345 --log
而後在VSCode的Debug窗格里選擇Remote。
設置斷點,按F5開始調試。(SHIFT+F5結束調試)



------------
跨平臺編譯
------------
(1)未安裝gox狀況
若是沒使用cgo,go自己就支持跨平臺編譯,設置GOOS和GOARCH便可。
------------------------------------------------------
GOOS        GOARCH            OS version
------------------------------------------------------
linux       386/amd64/arm     >= Linux 2.6
darwin      386/amd64         OS X (Snow Leopard + Lion)
freebsd     386/amd64         >= FreeBSD 7
windows     386/amd64         >= Windows 2000
-------------------------------------------------------
Mac下編譯Win64:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux下編譯Win64:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Win下編譯Mac:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

Win下編譯Linux 64:
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

(2)安裝gox狀況
$ go install github.com/mitchellh/gox
$ gox -h //查看幫助

直接在當前目錄按{{.Dir}}_{{.OS}}_{{.Arch}}格式生成全部跨平臺版本的程序:
$ cd $GOPATH/src/myproj
$ gox

經過output可指定輸出模板,-os可指定操做系統,以下:
$ gox -os="windows darwin linux" -output="./bin/{{.OS}}_{{.Arch}}/{{.Dir}}"


------------
vendor 管理
------------
安裝govendor(https://github.com/kardianos/govendor)
它能方便的管理包路徑
$ go get -u -v github.com/kardianos/govendor
$ govendor -version
v1.0.9
用法:
$ cd $GOPATH/src/myproj
$ govendor init           # 在項目文件夾產生 vendor/vendor.json
$ govendor add +external  # 添加$GOPATH中的依賴包到 vendor
$ govendor update +vendor # 從$GOPATH中更新依賴包到 vendor
$ govendor fetch +out     # 從網絡拉取依賴的包
# 拉取指定版本的包
$ govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55
$ govendor fetch golang.org/x/net/context@v1   # Get latest v1.*.* tag or branch.
$ govendor fetch golang.org/x/net/context@=v1  # Get the tag or branch named "v1".
$ govendor fetch golang.org/x/net/context    # 更新包
$ govendor list           # 顯示包,能夠用 -v fmt 參數查看某個包的詳細依賴
$ govendor update -uncommitted <updated-package-import-path> # 僅僅測試被改變的依賴包,但不真正更新 vendor
編輯 vendor/vendor.json 文件,在ignore字段可加入忽略的包,用空格分割,如:"ignore": "test appengine"
$ govendor fmt +local     # Format your repository only
$ govendor install +local # Build everything in your repository only
$ govendor test +local    # Test your repository only
說明:
+local 	l 	本地包,即項目自身的包組織
+external 	e 	外部包,即被 $GOPATH 管理,但不在 vendor 目錄下
+vendor 	v 	已被 govendor 管理,即在 vendor 目錄下
+std 	s 	標準庫中的包
+unused 	u 	未使用的包,即包在 vendor 目錄下,但項目並無用到
+missing 	m 	代碼引用了依賴包,但該包並無找到
+program 	p 	主程序包,意味着能夠編譯爲執行文件
+outside 	  	外部包和缺失的包
+all 	  	全部的包
命令:
init 	初始化 vendor 目錄
list 	列出全部的依賴包
add 	添加包到 vendor 目錄,如 govendor add +external 添加全部外部包
add PKG_PATH 	添加指定的依賴包到 vendor 目錄
update 	從 $GOPATH 更新依賴包到 vendor 目錄
remove 	從 vendor 管理中刪除依賴
status 	列出全部缺失、過時和修改過的包
fetch 	添加或更新包到本地 vendor 目錄
sync 	本地存在 vendor.json 時候拉去依賴包,匹配所記錄的版本
get 	相似 go get 目錄,拉取依賴包到 vendor 目錄
相關文章
相關標籤/搜索