V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Hellert
V2EX  ›  Go 编程语言

VSCode 写 Golang,请切换到 Google 官方语言服务器 gopls,有质的提升

  •  
  •   Hellert · 2019-05-20 09:04:56 +08:00 · 16699 次点击
    这是一个创建于 2021 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自从用了 gomod,VSCode 写 golang 各种问题,一度想放弃。 最近看了 vscode-go 项目,随即切换到了 Google 官方的语言服务器 gopls,发现跳转,hover,Code Complete 等等速度都有质的飞跃,大家不防一试,方法很简单,设置:

    "go.useLanguageServer": true
    
    49 条回复    2019-06-17 15:28:20 +08:00
    rawidn
        1
    rawidn  
       2019-05-20 09:07:59 +08:00 via iPhone
    jetbrain 保平安
    lepig
        2
    lepig  
       2019-05-20 09:14:26 +08:00
    生在了这么好的时代 为啥不用 goland 省心
    xy2401
        3
    xy2401  
       2019-05-20 09:17:29 +08:00
    goland 免费吗?
    fintan
        4
    fintan  
       2019-05-20 09:26:23 +08:00 via iPhone
    这个月 Go 语言插件第一次更新的时候就把启用 gopls 这个选项设为默认了
    janxin
        5
    janxin  
       2019-05-20 09:29:42 +08:00
    @lepig 因为买不起?
    wweir
        6
    wweir  
       2019-05-20 09:32:19 +08:00 via Android
    用上 lsp 几个月了,也是最近一个月才切换的 gopls,各种流畅各种爽。唯一权限是还不支持 go modules
    amaker
        7
    amaker  
       2019-05-20 09:32:35 +08:00
    哪里设置
    Hellert
        8
    Hellert  
    OP
       2019-05-20 09:35:50 +08:00
    @wweir gomod 支持,我最近一直在用,没发现什么问题
    janxin
        9
    janxin  
       2019-05-20 09:36:42 +08:00
    @wweir 支持的吧,只是支持经常会出问题
    wweir
        10
    wweir  
       2019-05-20 09:43:58 +08:00 via Android
    @Hellert 慢得要死,没法用,当然,有段时间没有这玩意了,特别是与 gopls 不搭

    @janxin 我说的是
    1. 项目放在 gopath 对应位置,能读到正确的依赖
    2. 项目不放在 gopath,各功能正常工作
    Hellert
        11
    Hellert  
    OP
       2019-05-20 09:45:59 +08:00
    @wweir gopls 最近更新很频繁,你要手动升级一下才行:Go: install/update tools
    BBCCBB
        12
    BBCCBB  
       2019-05-20 09:50:44 +08:00
    挂了代理装 golsp, 还是 timeout, 是我姿势不对吗
    wsseo
        13
    wsseo  
       2019-05-20 09:55:26 +08:00
    楼主,gopls 需要联网吗?
    以前用过 sourcegrapht 的 gopls,bingo,感觉不太成熟。
    楼主现在用的哪个版本的 gopls?
    janxin
        14
    janxin  
       2019-05-20 09:56:54 +08:00
    @wsseo gopls 是官方开发过程中的,具体的更新可以看这里

    https://go-review.googlesource.com/q/status:merged+gopls

    反正我隔几天就会升级一次
    Hellert
        15
    Hellert  
    OP
       2019-05-20 10:00:01 +08:00
    @wsseo gopls 是 google 官方的,以后估记和 godoc 这类一样会成内置吧,不需要联网。
    SourceGraph 和 bingo 都停止维护了,现在都推荐用 gopls。
    最新的 vscode-go 默认的 lsp 已经是 gopls,只需启用。
    scnace
        16
    scnace  
       2019-05-20 10:03:55 +08:00 via Android
    vscode-go 把 gocode 和 godef 全部 fork 了一份 然后现在 gocode-mod 不支持 package 的自动 import (本来的 gocode 是可以敲下包名就自动把 path import 进来了 现在还要自己 import 这个有点困扰了
    scnace
        17
    scnace  
       2019-05-20 10:05:35 +08:00 via Android
    (好像 vim-go 现在也用默认 gopls 了

    unstable 的东西这样滥用真的好吗 XD
    Hellert
        18
    Hellert  
    OP
       2019-05-20 10:16:03 +08:00
    @scnace 是的,不能自动 Import 我也遇到了,是个已知问题,后期 gopls 支持:
    https://github.com/microsoft/vscode-go/issues/2484
    https://github.com/golang/go/issues/31906
    wsseo
        19
    wsseo  
       2019-05-20 10:16:17 +08:00
    gopls 是开源的吗,github 上有吗?
    Vegetable
        20
    Vegetable  
       2019-05-20 10:21:02 +08:00
    @wsseo 是,在 /x/tools/里边吧

    我试了几次都是 timeout,也是一脸懵逼
    alexmy
        21
    alexmy  
       2019-05-20 10:21:47 +08:00
    我打开 setting.json 一看,默认就是 true 了。还是我失忆了。
    wsseo
        22
    wsseo  
       2019-05-20 10:25:11 +08:00
    goland 也是蛮好的,就是太贵了,一年要 1000 多,对一些人来说可能没必要。goland 字体渲染比 vscode 差。
    Muninn
        23
    Muninn  
       2019-05-20 10:46:46 +08:00
    想要更激进一点,用这个 https://github.com/saibing/tools

    bingo 的作者被邀请去写官方的 gopls,他会先在这里试,然后 merge 的官方库。

    总之最近是一直在更新了。
    scnace
        24
    scnace  
       2019-05-20 12:12:05 +08:00 via Android
    @Hellert 不过还好只影响 GO11MODULE=on 就是了🤣
    jinliming2
        25
    jinliming2  
       2019-05-20 12:29:41 +08:00 via iPhone
    @wsseo 没 1000 多那么贵吧?我买的单版本授权也就 89 刀一年,合计也就 600 多人民币啊……
    coldsnap
        26
    coldsnap  
       2019-05-20 12:40:26 +08:00
    gopls 有 rename 的功能吗?好像没找到配置可以开启,现在 go-renames 太慢了
    hujianxin
        27
    hujianxin  
       2019-05-20 13:05:43 +08:00
    @lepig 主要是有点小贵,给公司开发程序的话,公司不给报销,还得自己买
    Trim21
        28
    Trim21  
       2019-05-20 13:07:15 +08:00
    之前用 vscode,我记得有个用到的工具还不支持 go mod,被迫换回 goland...
    fuxiaohei
        29
    fuxiaohei  
       2019-05-20 13:14:52 +08:00
    gopls 会莫名其妙的内存泄漏和 cpu 巨高
    wsseo
        30
    wsseo  
       2019-05-20 13:23:33 +08:00
    @jinliming2 哦,我记错了,企业版是 1000 多
    wuchujie
        31
    wuchujie  
       2019-05-20 14:26:33 +08:00
    现在推荐用啥?我记得官方 github 之前推荐用 bingo 因为 mod 支持不好。我刚看了下配置还是
    "go.useLanguageServer": true,
    "go.alternateTools": {
    "go-langserver": "bingo"
    },
    "go.languageServerFlags": [
    "-enhance-signature-help",
    "-trace",
    "-format-style=goimports",
    ],
    index90
        32
    index90  
       2019-05-20 14:29:04 +08:00
    羡慕那些用得起免费的人
    janxin
        33
    janxin  
       2019-05-20 14:35:59 +08:00
    @fuxiaohei 还会莫名其妙识别不到标准库,我真的疯掉了
    wweir
        34
    wweir  
       2019-05-20 15:22:36 +08:00
    @fuxiaohei 最新版还好

    @janxin 别用 go modules 那套,只把包放在 GOPATH 里面,表现还好,用了几个月了
    whoami9894
        35
    whoami9894  
       2019-05-20 16:17:13 +08:00
    你们的 vscode-go 能提示标准库吗,输`import "github.com/"`或者`import "net/"`时自动补全包名
    judeng
        36
    judeng  
       2019-05-20 16:37:04 +08:00
    The gopls server crashed 5 times in the last 3 minutes. The server will not be restarted.

    开启后 crash 啊
    kidlj
        37
    kidlj  
       2019-05-20 16:40:41 +08:00
    当前 vscode-go/ gopls 对 modules 的支持还有不少问题。

    我是这样用的:

    把项目目录建立在 GOPATH 里。安装依赖时设定 GO111MODULE=on,然后 go mod vendor 到 vendor 目录。

    之后 GO111MODULE=off 使用,vscode-go 对 GOPATH 模式支持得很好。如果新加依赖就重复上述过程。
    suckli
        38
    suckli  
       2019-05-20 16:42:53 +08:00
    在公司内网连 go get 都用不了的人表示
    挺羡慕你们的
    wsseo
        39
    wsseo  
       2019-05-20 17:16:04 +08:00
    @whoami9894 我用的是传统的 gopath 和 go tools。
    使用包的时候会有函数提示,保存的时候会自动导入包。
    直接输入包名不会有提示。
    wsseo
        40
    wsseo  
       2019-05-20 17:18:54 +08:00
    使用传统 go tools,Windows 下函数提示,跳转定义较慢。建议用 vscode remote 到 linux 或各用 mac。
    wsseo
        41
    wsseo  
       2019-05-20 17:19:54 +08:00
    @suckli 下载压缩包,解压到对应目录也可以。
    LokiSharp
        42
    LokiSharp  
       2019-05-20 17:25:45 +08:00 via iPhone
    羡慕用得起 vscode 的人
    wweir
        43
    wweir  
       2019-05-20 20:27:34 +08:00 via Android   ❤️ 3
    搞明白 gopls 的坑了:只认一个根目录。
    可以是 gopath,也可以是一个 go modules 项目目录,
    同一 workspace 打开两个 目录,铁定报错
    janxin
        44
    janxin  
       2019-05-21 06:37:12 +08:00 via iPhone
    @wweir 主要没这样用过😂
    d0m2o08
        45
    d0m2o08  
       2019-05-21 10:09:49 +08:00
    win10 vscode remote 加上 gopls, 导致跳转定义不能用,禁用之后跳转定义正常,有大佬遇到过么
    knowckx
        46
    knowckx  
       2019-05-23 18:20:36 +08:00
    @fuxiaohei +1
    我今天发现 gopls.exe 内存涨到 2 个 G
    p1gd0g
        47
    p1gd0g  
       2019-05-27 19:28:47 +08:00
    @knowckx +1
    俺这里 4 个 G。
    devoutsin
        48
    devoutsin  
       2019-06-17 15:27:33 +08:00
    @fuxiaohei +1,代码跳转和提示经常性不工作,处在 loading 状态,然后内存暴涨,风扇开始呼呼转,已经放弃投奔 goland
    devoutsin
        49
    devoutsin  
       2019-06-17 15:28:20 +08:00
    @fuxiaohei +1,鼠标悬停处在 loading 状态,然后内存暴涨,风扇开始呼呼转,已经放弃投奔 goland
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:45 · PVG 00:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.