美文网首页Golang 入门资料+笔记GolangGo
再记录一下vscode配置golang开发的一些注意事项

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

作者: 毛毛v5 | 来源:发表于2019-07-25 09:49 被阅读7次

    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

    相关文章

      网友评论

        本文标题:再记录一下vscode配置golang开发的一些注意事项

        本文链接:https://www.haomeiwen.com/subject/malcrctx.html