一、vscode-go插件安裝
- go 1.10.2 https://golang.org/dl/ 需要牆
- vscode 1.23.1 https://code.visualstudio.com/
- vs插件安裝

二、vscode-go 配置
- settins.json 基本上不需要配置,用默認值就可以了。如需調整 文件 -->首選項 -->設置 輸入go即可查看go相關配置
{
"git.ignoreLimitWarning": true,
//開啟自動保存
"files.autoSave": "onFocusChange",
"go.buildFlags": [],
"go.lintFlags": [],
"go.useCodeSnippetsOnFunctionSuggest": false,
"[go]": {
"editor.insertSpaces": false,
"editor.formatOnSave": true
},
"go.formatTool": "goreturns",
"go.goroot": "C:\\Go",
"go.gopath": "D:\\GoPath"
}
- launch.json配置,文件 -->打開文件 -->(選擇GOPATH文件夾)

{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
//"port": 2345,
//"host": "127.0.0.1",
"program": "${fileDirname}", //workspaceRoot
"env": {},
"args": [],
"showLog": true
}
]
}
三、組件&工具安裝前期准備工作
由於要安裝的組件大量引用了golang.org官方原生的一些代碼(特別是tools/lint),因此引用代碼不存在的話會導致第三方的源代碼編譯不通過,且大量報錯
directory "D:\GoPath\src\golang.org\x\tools\go\buildutil" is not using a known version control system 等等...
golang.org官方源碼列表 & 對應的github.com映射關系,可視情況安裝:
| github.com | golang.org | 源碼大小 | 是否必須 |
|---|---|---|---|
| git@github.com:golang/lint.git | golang.org/x/lint | 470kb | Y |
| git@github.com:golang/tools.git | golang.org/x/tools | 21.4mb | Y |
| git@github.com:golang/sys.git | golang.org/x/sys | 8.74mb | Y |
| git@github.com:golang/text.git | golang.org/x/text | 46.9mb | - |
| git@github.com:golang/net.git | golang.org/x/net | 12.6mb | - |
| git@github.com:golang/tour.git | golang.org/x/tour | 12.6mb | - |
Tips:先檢查下 %GoPath%\src\golang.org\x 文件夾下的tools/lint等是否是從github獲取的最新版本,若文件夾不存在自己創建
(注意一定要是git clone,而不是下載zip解壓),正確如下圖所示


關於golang包管理機制,另一篇文章 window下golang包管理glide使用說明也是解決類似問題。go官方也許會在go2.0的版本解決
四、正式開始安裝組件&工具
官方文檔說明 https://github.com/Microsoft/vscode-go/wiki/Go-tools-that-the-Go-extension-depends-on
vscode也可以通過ctrl+shift+p 運行命令一次性安裝所有這些工具

Go: Install/Update Tools

組件安裝過程稍微有一點慢,耐心的等待...
| 安裝的組件 | 默認安裝狀態 | 組件備注 | github.com->golang.org |
|---|---|---|---|
| go get -u -v github.com/nsf/gocode | SUCCEEDED | 自動補全 | |
| go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs | SUCCEEDED | 自動補全未導入的包 | |
| go get -u -v github.com/ramya-rao-a/go-outline | SUCCEEDED | 當前文件中按符號搜索 | https://github.com/golang/tools |
| go get -u -v github.com/acroca/go-symbols | SUCCEEDED | 當前workspace中按符號搜索 | |
| go get -u -v golang.org/x/tools/cmd/guru | SUCCEEDED | 查找所有引用組件 | |
| go get -u -v golang.org/x/tools/cmd/gorename | SUCCEEDED | 重命名符號 | |
| go get -u -v github.com/fatih/gomodifytags | SUCCEEDED | 修改結構上的標簽 | |
| go get -u -v github.com/haya14busa/goplay/cmd/goplay | SUCCEEDED | for running current file in the Go playground | |
| go get -u -v github.com/josharian/impl | SUCCEEDED | for generating stubs for interfaces | |
| go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct | SUCCEEDED | for filling a struct literal with default values | |
| go get -u -v github.com/rogpeppe/godef | SUCCEEDED | 轉到定義2 | |
| go get -u -v golang.org/x/tools/cmd/godoc | SUCCEEDED | 鼠標懸停顯示文檔注釋2 | |
| go get -u -v sourcegraph.com/sqs/goreturns | SUCCEEDED | 格式化代碼2 | |
| go get -u -v github.com/golang/lint/golint | SUCCEEDED | for linting | https://github.com/golang/lint |
| go get -u -v github.com/cweill/gotests/... | SUCCEEDED | 生成單元測試 | |
| go get -u -v github.com/derekparker/delve/cmd/dlv | SUCCEEDED | 調試 | |
| go get -u -v github.com/zmb3/gogetdoc | 轉到定義2/鼠標懸停顯示注釋2 | ||
| go get -u -v golang.org/x/tools/cmd/goimports | 格式化代碼2 |
經過步驟三的tools和lint的clone后安裝正常都應該是SUCCEEDED,且不需要牆,如遇個別安裝FAILED 再單獨執行go get ...,看還缺少什么在http://github.com/golang 中找到相應的組件按同樣的方法clone在golang.org/x文件夾下
TIPS:go版本和組件全部都重新安裝一遍后也能解決vscode 運行go卡的問題,具體原因不詳,建議go版本更新后最好都重新安裝下組件。
之前一直嫌棄vscode運行go卡而用liteide。重新開始用vscode主要原因: 1、顏值高 2、vscode已成為了非常流行的IDE
五、 cannot find package錯誤

檢查go環境變量配置,新安裝的go1.10.2的版本默認會在當前用戶新增一個GOPATH導致沖突無法編譯,刪除即可

六、 調試/生成
- vscode打開main.go直接F5就可以運行&調試
- 生成exe,vscode F5運行會在根路徑下生成一個debug文件,把debug文件重命名加.exe后綴可以直接當應用程序運行
另一種方式cmd切換到項目文件夾下用
go build -o demo.exe main.go
意思是main.go生成名為demo.exe應用程序,go build生成的exe實際比debug要小
