gopls安装失败后,解决问题的后续思路

gopls安装失败后,解决问题的后续思路

  • 文档不严谨,问题没有得到根本解决,仅作为解决思路和现有线索的一个记录

  • vim-go要求安装一个gopls的依赖包,

    • 尝试的解决方法
      • 但是直接安装的时候,报语法错,在gotype中的接口缺少类型实现。
        go/src/golang.org/x/tools/internal/lsp/source/deep completion.go:66:39: v.Embedded undefined (type *types.Var has no field or method Embedded)
        ***symbols.go:234:18: ti.EmbeddedType undefined***
        
      • 下载一个编译好的文件直接放到$GOPATH/bin路径下,在打开vim编辑器的时候,会报错:
        vim-go: initialize gopls
        vim-go: Features that rely on gopls will not work correctly in a null module
        
    • 分析
      • 这两个问题不是同一个问题,一个是gopls安装不成功,另一个开始的时候以为是不兼容,后来才明白是因为在gopath中没有配置当前的项目路径?(但是其实在默认的gopath中随便写了一个脚本,也是会报同样的问题)
      • 为了解决gopls安装失败的问题,我怀疑是版本不匹配的问题。分析了一下,gopls安装的时候,调用的包internal同样也是tools下的,而tools是整体clone下来的,所以gopls和internal不兼容的可能性比较小,而追踪了一下代码,发现其实报错的地方是使用了go.types中的一个接口的实现。所以不兼容产生在golang 和tools之间。
      • 我看了一下go version 发现是1.10版本,我打算改掉tools的版本,tools因为我是使用gitclone下来的(不要问我为什么,原因大家懂的,即时我爬了梯子,还是没能直接go get到),所以我直接将tools切换到了到了release-branch.go1.10版本。发现根本没有gopls。release-branch.go1.11版本也同样没有。只有release-branch.go1.12版本有,然后使用go install命令安装
      go install golang.org/x/tools/cmd/gopls
      
      和master版本比起来,release-branch.go1.12版本下的gopls是在cmd下面,而master版本中gopls是在cmd和tools下面都有。
      安装,当然是安装成功了。
      • 然后迫不及待的试了一下,结果报了错误仍然是:
        vim-go: initialize gopls
        vim-go: Features that rely on gopls will not work correctly in a null module
        
      • 然后详细的google了一下这个问题,发现遇到这个问题的有两种倾向的解决方法啊,一个是继续容忍这个错误,在vim的配置文件中添加这个配置,那么报错信息至少不会出现
      • 另一个说法,gopls最新版本已经解决了这个问题,需要升级到master版本,WTF,我安装master版本不是失败了嘛。
      • 以为我认为是版本不兼容问题,所以我决定,升级我的golang
      • golang升级到1.12.7版本后,重新安装goplus@master,结果果然成功了,没有报错。
      • 但是遗憾的是,最后打开vim的时候,还是报相同的错误,证明最新的goplus版本并没有解决这个问题。
      • 那么gopls到底应该如何工作呢,虽然打开单独的.go文件会导致报错,但是在项目路径中,发现,gopls并不会报错。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值