再记录一下vscode配置golang开发的一些注意事项

毛毛v5 · 2019-07-25 10:32:42 · 2735 次点击 · 预计阅读时间 4 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-07-25 10:32:42 的文章,其中的信息可能已经有所发展或是发生改变。

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,不要了,要了会又冲突,造成错误。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:毛毛v5

查看原文:再记录一下vscode配置golang开发的一些注意事项

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2735 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传