Go官方安裝與體驗教程,VSCODE中Go配置
go下載與安裝
- 前往https://golang.google.cn/dl/下載linux系統對應的安裝包,后綴為.tar.gz
- 前往https://golang.google.cn/doc/install安裝指導查看相關命令,在linux系統下
tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
,查看tar --help,-C選項的意思是-C, --directory=DIR change to directory DIR
,-x表示解壓,-z表示使用gzip解壓,-f后接壓縮文件路徑,這條命令將解壓.tar.gz文件,解壓目錄為/usr/localexport PATH=$PATH:/usr/local/go/bin
添加環境變量/usr/local/go/bin到$PATH的末尾,使用echo $PATH
可以看到當前的$PATH的值,可以看到不同的目錄是用冒號隔開的,因此PATH=$PATH:/usr/local/go/bin
表示將/usr/local/go/bin加如到$PATH的末尾.隨后source $HOME/.profile
使得更改生效.go version
有輸出代表安裝成功
Go 官方體驗教程
-
前往https://golang.google.cn/doc/tutorial/getting-started查看Get Started教程
-
盡量使用梯子FQ完成教程,浪費時間在網絡問題上實在沒必要.
-
$HOME目錄下創建一個GoLearning文件夾,進入此文件夾,創建hello目錄
-
在hello目錄中指定工作區目錄GOPATH,Go通過GoPATH來確定生成中間文件和可執行文件的路徑,命令為
# GOPATH默認是空的,pwd導出當前目錄,`pwd`獲得當前目錄值 export GOPATH=`pwd` # 可用echo $GOPATH查看當前GoPATH的值
-
文本編輯寫一個hello.go文件,必須從main包開始
package main import "fmt" func main() { fmt.Println("Hello, World!") }
-
go run hello.go
輸出Hello,world -
將hello.go改為
package main import "fmt" import "rsc.io/quote" func main() { fmt.Println(quote.Go()) }
-
跳轉到GoLearning文件夾,執行
go mod init hello
在GoLearning文件夾下生成go.mod文件
8.go run hello.go
下載rsc.io/quote,輸出Don't communicate by sharing memory, share memory by communicating.
目前來看go mod應該是一個包管理器,有點像python的pip工具或conda工具
9. 隨后官方提供了一些代碼描述go語言的一些特性,random包,測試框架等,略過,本博客只關注環境部分.
10. 上述使用go run命令編譯運行hello.go,適合調試階段使用.在發布時,需要生成相關的二進制可執行文件和依賴文件,此時使用go install命令,go install 的作用有兩步:第一步是編譯導入的包文件,所有導入的包文件編譯完才會編譯主程序;第二步是將編譯后生成的可執行文件放到 bin 目錄下($GOPATH/bin),編譯后的包文件放到 pkg 目錄下($GOPATH/pkg)。($GOPATH為Go的工作目錄)
11. 在hello文件夾中執行go install
,將生成bin/hello可執行文件,相關依賴包放置在pkg文件夾中,通過設置$GOBIN環境變量可以指定二進制文件路徑,類似設置GOPATH,使用export GOBIN=/yourpath
,若希望能在shell中任意目錄執行hello,可將hello加入PATH環境變量末尾,類似前文,使用export PATH=$PATH:/yourpath/hello
-
VSCODE中配置
-
# 通過設置七牛雲代理來避免下載失敗,關鍵是開啟go env # 中的GO111MODULE和GOPROXY # 啟用 Go Modules 功能 export GO111MODULE=on # 配置 GOPROXY 環境變量 export GOPROXY=https://goproxy.io # 使環境變量設置生效 source #HOME/.profile # go env檢查這兩個字段 # 這里的設置是永久的,對所有目錄生效 # 如果只想設置當前GOPATH的env # 則執行 # go env -w GO111MODULE=on # go env -w GOPROXY=https://goproxy.io,direct
-
在hello目錄下執行以下go install,執行完后bin目錄下會生成golint,godef,gocode等二進制工具,之后只需要將這些二進制文件拷貝到go工程中即可使用這些常用格式化,檢查等工具了.
go install github.com/mdempsky/gocode go install github.com/uudashr/gopkgs/v2/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/cweill/gotests/... go install github.com/fatih/gomodifytags go install github.com/josharian/impl go install github.com/davidrjenni/reftools/cmd/fillstruct go install github.com/haya14busa/goplay/cmd/goplay go install github.com/godoctor/godoctor go install github.com/go-delve/delve/cmd/dlv go install github.com/stamblerre/gocode go install github.com/rogpeppe/godef go install github.com/sqs/goreturns go install golang.org/x/lint/golint go install golang.org/x/tools/gopls
-
此時go.mod文件中顯示
module hello go 1.15 require ( github.com/acroca/go-symbols v0.1.1 // indirect github.com/cweill/gotests v1.5.3 // indirect github.com/davidrjenni/reftools v0.0.0-20201119194839-01cf781abd5b // indirect github.com/fatih/gomodifytags v1.13.0 // indirect github.com/go-delve/delve v1.5.0 // indirect github.com/godoctor/godoctor v0.0.0-20200702010311-8433dcb3dc61 // indirect github.com/haya14busa/goplay v1.0.0 // indirect github.com/josharian/impl v1.0.0 // indirect github.com/mdempsky/gocode v0.0.0-20200405233807-4acdcbdea79d // indirect github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb // indirect github.com/rogpeppe/godef v1.1.2 // indirect github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518 // indirect github.com/stamblerre/gocode v1.0.0 // indirect github.com/uudashr/gopkgs/v2 v2.1.2 // indirect golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect golang.org/x/tools v0.0.0-20201204222352-654352759326 // indirect golang.org/x/tools/gopls v0.5.5 // indirect )
4.vscode工作區設置setting.json
// 具體字段設置還得在實踐中體會 { "files.autoSave": "onFocusChange", "workbench.colorTheme": "Visual Studio Dark", "go.buildOnSave": "package", "go.lintOnSave": "package", "go.vetOnSave": "package", "go.buildTags": "", "go.buildFlags": [], "go.lintFlags": [], "go.vetFlags": [], "go.coverOnSave": false, "go.useCodeSnippetsOnFunctionSuggest": true, "go.formatTool": "goreturns", "go.goroot": "/usr/local/go", "go.gopath": "/home/liuzhan/GoLearning", "go.gocodeAutoBuild": false, "http.proxy": "https://goproxy.cn", }
5.vscode launch.json設置
屬性 說明 name 定義配置名字 type 指定語言,這里我們填go即可 request launch ,attach, 當需要對一個已經運行的的程序 debug 時才使用 attach,其他時候使用launch mode 對於 launch 有 auto, debug, remote, test, exec, 對於 attach只有local,remote program 指定包, 文件或者是二進制的絕對路徑 env 調試程序時需要注入的環境變量, 例如:{ "ENVNAME": "ENVVALUE" } envFile 絕對路徑,env的值會覆蓋envFile的值 args 需要傳給調試程序的命令行參數 showLog 布爾值,是否在調試控制台打印日志, 一般為true logOutput 日志輸出目標, 使用逗號分隔達到使用多個組件輸出日志的目的 (debugger, gdbwire, lldbout, debuglineerr, rpc), 當 showLog 為 true 有效 buildFlags 構建程序時需要傳遞給 Go 編譯器的 Flags build tags: 如果在構建時需要構建標簽, (比如:go build -tags=whatever_tag ), 則需要使用標簽buildFlags 並添加內容: "-tags=whatever_tag" ,如果你需要使用多個標簽時, 則需要使用單引號引起來,像這樣:"-tags='first_tag second_tag third_tag'" remotePath 如果mode為remote時, 需要指定調試文件所在服務器的絕對路徑 processId 進程 id host 目標服務器地址 port 目標端口 ${workspaceFolder} 在工作區的的根目錄調試程序 ${file} 調試當前文件 ${fileDirname} 調試當前文件所屬的程序包 上面是一些前置知識,目前需要的簡單運行和調試只需要這樣設置launch.json就行,在帶有main的函數文件中執行CTRL+F5,即可執行,相當於go run $file { // 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。 // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Launch File", "type": "go", "request": "launch", "mode": "auto", "program": "${file}", "env": {}, "args": [] } ] }