再記錄一下vscode配置golang開發的一些注意事項

M$推出vscode之後,感覺世界真美好。於是從liteide轉到vscode了。但是golang組織代碼的目錄管理這尿性比較奇葩。常常把自己搞得五迷三道的。有時候正常,有時候又掉鏈子。現在記錄一下一些注意事項。
windows下的vscode,首先安裝golang到 c:/Go 也就是環境變量GOROOT=c:/Go,然後指定GOPATH=c:/Go/gopath 這個目錄自己建立。環境變量裏面GOROOT和GOPATH只留下系統變量,用戶變量中的GOROOT,GOPATH刪除。不然鬼知道會搞出神馬衝突,不划算,環境變量設置好之後,一定要重新自動下電腦,不然有時候vscode讀不到最新環境變量設置。之所以GOPATH指定一個專用目錄,而不是用戶目錄(類似 C:\Users\Administrator\go),主要因爲項目如果發佈到git,自己在多臺電腦上編譯代碼的話。比較麻煩所以統一指定固定目錄。
然後vscode安裝微軟的ms-vscode.go插件。穿好後用workspace來組織golang代碼。
目錄結構大致如下:

G:\DEVTOOLS\project\git\MonsterLive\WebSocketServerGo\MonsterShowMain>dir
 驅動器 G 中的卷沒有標籤。
 卷的序列號是 CC73-754C

 G:\DEVTOOLS\project\git\MonsterLive\WebSocketServerGo\MonsterShowMain 的目錄

2019/07/25  09:12    <DIR>          .
2019/07/25  09:12    <DIR>          ..
2019/07/25  09:02    <DIR>          .vscode
2019/07/25  09:12               982 MonsterShowMain.code-workspace
2019/07/25  09:02    <DIR>          src
               1 個文件            982 字節
               4 個目錄  4,248,682,496 可用字節

.vscode是vscode的配置文件所在目錄。MonsterShowMain.code-workspace文件是vscode的workspace文件。裏面可以設置本工程的一些環境變量。其內容大致如下:

{
    "folders": [
        {
            "path": "."
        }
    ],

    "settings": {
        "go.inferGopath": true,
        "go.buildOnSave": "workspace",
        "go.lintOnSave": "package",
        "go.vetOnSave": "package",
        "go.buildTags": "",
        "go.buildFlags": [],
        "go.lintFlags": [],
        "go.vetFlags": [],
        "go.coverOnSave": false,
        "go.useCodeSnippetsOnFunctionSuggest": false,
        "go.formatTool": "goreturns",
        "go.goroot": "C:/Go/",
        "go.gopath": "C:/Go/gopath/go/",
        "go.toolsGopath":"C:/Go/gopath/go/",
        "go.gocodeAutoBuild": false,
        "go.useLanguageServer": true,
        "go.alternateTools": {
          "go-langserver": "gopls", 
        },
        "go.languageServerExperimentalFeatures": {
          "format": true,
          "autoComplete": true
        },
        "[go]": {
            "editor.codeActionsOnSave": {
                "source.organizeImports": true
            },
        }



    }   
}

其中的:

"go.inferGopath": true,
"go.goroot": "C:/Go/",
"go.gopath": "C:/Go/gopath/go/",
"go.toolsGopath":"C:/Go/gopath/go/",

這四行相當重要。vscode的調試菜單啓動時讀取的是windows系統的環境變量中的GOPATH, 而項目中的編譯,智能提示,可以用上面四行設置中的路徑覆蓋環境變量。
其中 go.toolsGopath 也設置上比較好。不然會在本地項目中創建bin目錄,麻煩。指定一個固定位置,多個項目可以共享這些工具。這些工具就是

Installing 12 tools at C:/Go/gopath/go/\bin
  gocode
  gopkgs
  go-outline
  go-symbols
  guru
  gorename
  dlv
  gocode-gomod
  godef
  goreturns
  golint
  gopls

Installing github.com/mdempsky/gocode SUCCEEDED
Installing github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDED
Installing github.com/ramya-rao-a/go-outline SUCCEEDED
Installing github.com/acroca/go-symbols SUCCEEDED
Installing golang.org/x/tools/cmd/guru SUCCEEDED
Installing golang.org/x/tools/cmd/gorename SUCCEEDED
Installing github.com/go-delve/delve/cmd/dlv SUCCEEDED
Installing github.com/stamblerre/gocode SUCCEEDED
Installing github.com/rogpeppe/godef SUCCEEDED
Installing github.com/sqs/goreturns SUCCEEDED
Installing golang.org/x/lint/golint FAILED

這些鳥東西。

"go.inferGopath": true 的作用是把本地項目的src也包含到gopath中,但是不污染全局gopath,大概就是這個意思。

然後.vscode目錄下面有個launch.json,如下:

G:\DEVTOOLS\project\git\MonsterLive\WebSocketServerGo\MonsterShowMain\.vscode>dir
 驅動器 G 中的卷沒有標籤。
 卷的序列號是 CC73-754C

 G:\DEVTOOLS\project\git\MonsterLive\WebSocketServerGo\MonsterShowMain\.vscode 的目錄

2019/07/25  09:02    <DIR>          .
2019/07/25  09:02    <DIR>          ..
2019/07/25  09:02               626 launch.json
               1 個文件            626 字節
               2 個目錄  4,248,682,496 可用字節

G:\DEVTOOLS\project\git\MonsterLive\WebSocketServerGo\MonsterShowMain\.vscode>

這個文件的主要作用是讓vscode的調試和運行菜單關聯到運行的代碼,其內容如下:

{
    // 使用 IntelliSense 瞭解相關屬性。 
    // 懸停以查看現有屬性的描述。src\Pic98\main.go
    // 欲瞭解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceRoot}/src/main.go",
            "env": {
                //"GOPATH":"C:/Go/gopath/go/",
                //"GOROOT":"C:/Go/",

            },
            "args": []
        }
    ]
}

其中 program 就是指定你要自動的主程序源代碼。
env裏面的GOPATH,GOROOT,不要了,要了會又衝突,造成錯誤。
檢查當前vscode工程的GOPATH路徑的命令 -》vscode 菜單 view -> command palette -> GO:current GOPATH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章