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

163 天前
 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 。我曾经以为这种功能甚至是基础到不能再基础的功能,结果没想到。。。。

9350 次点击
所在节点    Visual Studio Code
97 条回复
zzhirong
162 天前
我倒是感觉这样做挺好的?不然,项目小的话还好说,项目大的话,写个通用方法比如 New 那不得卡半天。
jorneyr
162 天前
你不能只有在吹 vscode 的时候才说它完全能平替 goland ,一遇到问题(尤其是补全这么基础直接影响体验的地方)就直接切割是 gopls 的锅:不意外,新能源汽车也是这种宣传风格,宣传时智能驾驶很牛逼,出问题后我们的只是辅助驾驶没那么牛逼。
chrosing
162 天前
我也看见过很多说这个好那个好的 真正体验下来 适合自己的就行了 这个世界太多“诱惑”了 把握自己就行了
magggia
162 天前
"一个项目复杂起来,那么多目录那么多包谁能清楚记得要用的东西在哪个包啊"
额,函数名都能想起来个关键字,用哪个包的想不起来吗?打个 ut 就能提示了吧,不然项目复杂起来类似函数名会很多,更不好区分了
iseki
162 天前
@songray 这种设置不能搭配 LSP 那它存在的意义是什么呢
zogwosh
162 天前
vscode 的语言服务器只有 ts 好用。
niubiman
162 天前
@zogwosh c#写后端用起来也还不错, 能有 vs 的八九成
kuanat
162 天前
@kuanat #68

vscode 不行哈哈,原因就是 #73 说的。
1103409364
162 天前
写 rust 感觉还可以
qloog
162 天前
以前也是用 goland, 更新到新版本后需要收费了,懒得折腾,现在基本是 vscode+ github copilot , 用起来很爽,开发 go, php, python, nodejs 都很方便,安装对应的 plugin 就可以了。
davidqw
162 天前
VS Code 直接用 copilot 不好吗?免费代码补全,最近支持大模型 API 接入了
Joker520
162 天前
vscode 就是个编辑器,为啥老有人拿它跟 ide 比
iyaozhen
162 天前
@tedzhou1221 gopls 大项目更耗内存,128GB 都不够用
PTLin
162 天前
楼主的这个问题不就单单只是 gopls 的问题吗。
为什么还有人说什么 vsc 就是个“editor”,不是 ide 。
25 年了,真的还有人认为 ide 就应该是 ide 的样子,editor 就是 editor 的样子吗,还有人认为 vsc 不是所谓的“ide”吗。
linanwy
162 天前
客观的来说,vscode 写 go 确实补全很差,其他大大小小的 bug 也多。但是 goland/idea 自己也有大大小小的问题,比如内存占用太高等。只是有的忍得了,有的忍不了,而忍得了和忍不了的又因人而异罢了
nickyadance23
160 天前
@Xinu #69 我就一直没搞懂 vscode 里怎么跟到三方库的代码,golang 里对着函数名一路点就行
jrqlxue
155 天前
1. 我自己常用的包,不在这个项目里,写函数名的一部分时大部分时候都能搜到,然后自动给 import ,当然更包括基础包了
2. 项目内新写的包没仔细试过,不过也可能习惯项目内用包名,然后根据提示选函数
3. 最近 vscode 特别卡,经常写代码刚写一个字符,然后卡死好久,或者卡顿出来首字母提示,之前的时候很丝滑,开 AI 辅助也没这么卡过
4. 之前用 goland ,切到 vscode 的时候总主观感觉没 goland 好用,大概
a. 变量提示、搜索和跳转的时候 goland 更完整?
b. git 提交的时候,goland 功能更丰富,比如可以筛选提交修改的一部分行

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

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

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

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

© 2021 V2EX