vscode 写 go 连最基础的补全功能都做得这么差的吗

162 天前
 BeautifulSoap

一直用的都是 goland/idea 写 go ,体验了下用 vsocde 开发 go ,结果发现怎么连最基础的补全功能都这么差

有点无法理解说 vscode 写 go 的体验和 goland 差不多的是认真的吗。。。。。

下面是一个简单到不能再简单的的例子,如果是我用 vscode 姿势不对,希望有人能指出问题所在

go mod 初始化好项目用 vsocde 打开(确保 gopls 的 lsp 已经正确运行),写一个 utils 包 utils/utils.go,内容如下:

package utils

func ThisIsMyHelperFunction() string {
	return "hello"

}

关掉这个文件的标签页,打开 main.go ,输入 ThisIsMy,我自然期待补全会给出对应的函数候补,结果 vscode 根本跳不出任何候补。不是,vscode 这么离谱的吗

然后我发现,把utils.go 文件作为非活动标签页打开在边上,然后再输 ThisIsMy ,这次候补里出现了,但是它只是作为一个纯字符串出现,vscode 甚至都无法识别出它是个函数,tab 上去之后 ctrl + . 甚至都没法正常导包,提示不存在定义

然后翻了半天 vscode 官网,才发现说明有这一句

As you type in a Go file, you can see IntelliSense providing you with suggested completions. This even works for members in current, imported, and not yet imported packages. Just type any package name followed by ., and you will get suggestions for the corresponding package members.

不是,你的意思是我要用一个类型 or 函数之类的,必须从所属的包开始输入吗?一个项目复杂起来,那么多目录那么多包谁能清楚记得要用的东西在哪个包啊。。。。。。

而与之相对的,在 goland/idea 中写 go 项目,我只要输入 ThisIs 就能跳出对应内容,tab 后就直接完成了补全+添加包前缀+自动 import 。我曾经以为这种功能甚至是基础到不能再基础的功能,结果没想到。。。。

9339 次点击
所在节点    Visual Studio Code
97 条回复
bouts0309
162 天前
我记得说是 goland 用的自己的 language server ,不使用 gopls ?
反正我也是 vscode(cursor)写 go 的时候提示啥的太慢了,回去继续用 goland 的
HappyAndSmile
162 天前
免费的才是最贵的,我用了 7 年以上的正版 Goland 了,我根本不相信 VS Code 可以平替
zaunist
162 天前
不至于吧,我用的时候提示啥的还是挺好用的,你没装 gopls 吗,装了的话,没记错默认用的微软的 lsp ,我感觉挺好用的。离线环境下 jb 家的产品非常好使(代价是每次启动 index 就要等好久。。。),但是联网的时候我觉得两者用起来差不多。
pinecone1
162 天前
在用 cursor 写 go
很多时候都不用写个开头 你按个回车新开一行 编辑器就猜出来你打算写什么了。。。就挺离谱的
proxytoworld
162 天前
@pinecone1 那是 ai 猜的,不是 cursor 干的
jheroy
162 天前
确实是你没用对,gopls 补全是可以设置补全未 import 的包的。
duanzhanling
162 天前
哈哈,我就是围观下
kuanat
161 天前
我认为是 vscode 的锅,因为我的印象里这个功能 gopls 很早就有了,不过我现在主力是 neovim ,待我验证一下。
Xinu
161 天前
不光是 golang js 体验我都觉得不如 webstorm ,就追代码这个功能,实现的贼烂
jheroy
161 天前
gopls: Enabling the setting go.autocompleteUnimportedPackages used to provide completions for unimported packages.
levelworm
161 天前
@lepig #8
我感觉写自己的 C/C++还是他最舒服。
dragondove
161 天前
@jheroy 这个选项是默认启用的,我也试过手动启用了,还是不能这样补全,你可以试试
songray
161 天前
@dragondove 因为这个设置不能搭配 language server 使用,具体的表述是:
Include unimported packages in auto-complete suggestions. Not applicable when using the language server.
tedzhou1221
161 天前
如果不是 cursor 我是不会用 vsc 这东西的。JB 省心省力。只是不省内存
RedisMasterNode
161 天前
@kdwnil 要手输包名也太蠢了...只记得方法名关键词看来是不配用 vscode 了
Mr54
161 天前
vscode 很多功能都是缺失的,写前端也是要安装很多插件
SummerAgain
161 天前
我也是 goland 的深度用户,但是也切换到 vscode 了,不过装了主题和快捷键映射等插件, 写在已经可以对 goland 脱敏了,代码补充的问题基本没遇到,go 的插件本身就能补充提示了,在装了通义灵码增强了一下,主要一个全免费,goland 里面有的功能 vscode 基本都有
pinecone1
161 天前
@proxytoworld 好用就完事了,我管它是哪个 app
jheroy
161 天前
@dragondove #72 我试了一下,vscode 里面, 如果实现没有 import 的包补全要在前面加包名(包名可以补全会自动 import 包), 如果已经 import 就可以直接补全函数而不需要包名。 估计是怕项目太大要整个项目查询比较耗时。
kiwi95
161 天前
架不住 vscode 免费,插件多,重启速度快,远程开发流畅,goland 到 wsl 都卡的不行,这么多年都搞不好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1123995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX