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 目錄