Cursor 让我一天上手 Go 语言

Published on:

最近看到网上不少人在讨论 Cursor 这款 AI 代码编辑器,我开始时还不以为然,因为在去年 Cursor 刚推出时我就试用了,当时并没有觉得特别惊艳,感觉和 Github 的 Copilot 差不多,甚至还不如 Copilot 好用。但最近我被要求去开发一个新项目,我就想在新项目里尝试使用 Cursor 来开发,看看它是否有网上说的那么强大。今天我将为大家讲述我在这个新项目中使用 Cursor 的真实经历,并分享一些我的使用心得和体会。

背景介绍

最近被要求去开发一个新项目,这个项目是另外一位同事用 Go 语言开发的,已经开发了一段时间,但开发进度比原计划落后比较大,所以希望增加开发人手,希望我的加入能够在项目的里程碑节点完成开发工作。但尴尬的是,我之前并没有真正地写过 Go 语言。

虽然我之前没有真正的写过 Go 语言,但或多或少看过一些 Go 语言的代码,而且我有其他语言的开发经验,我相信我可以很快上手 Go 语言,所以我决定接受这个挑战。

决定使用 Cursor

在决定加入这个项目的这段时间,我经常在网上看到关于 Cursor 的宣传,我开始时并没有太在意,因为我觉得我已经有了 Github 的 Copilot,而且我去年也试用过 Cursor,没有觉得特别惊艳。但很多人跟我说 Cursor 和以前非常不一样了,强大了很多,被多次洗脑后,我决定尝试在新项目中使用 Cursor。

第一天的编码

在使用 Cursor 之前,我看过一些关于 Cursor 的介绍,其中它的一个功能让我印象深刻,就是它在回答我们问题时可以基于整个代码库的代码来回答,而不是像 Copilot 那样只能基于当前文件的代码来回答。于是我使用 Cursor 开发新项目的第一件事,就是让它帮我介绍这个项目,然后它开始扫描项目的每个文件,给我了下面的回答:

这使我我了解到项目的基本信息:

  • 项目分为客户端和服务端,都是用 Go 语言开发的
  • 服务端使用了 Gin 开发框架,数据库使用的是 PostgresSQL
  • 客户端使用了 Cobra 库,用于命令行工具的开发

了解了项目的基本情况后,我开始尝试开发一个删除用户的小功能,首先我找到要修改的文件,然后在我要修改的地方按了一下回车,接着神奇地发现 Cursor 已经帮我补全了方法签名,并且 Cursor 知道这是我要添加的功能,然后我再按下 Tab 键,方法的实现代码就出现了,而且是根据项目的代码风格来的,这让我非常惊讶。

我怀疑是我在修改代码之前查看了其他关于删除用户的代码,或者是在检索代码片段时使用了一些关键字,让 Cursor 知道了我要添加的功能是什么。

当然,你不可能所有事情都依赖 Cursor,在修改代码之前,你需要了解项目的基本结构、需要改动哪些文件、需求的业务逻辑等,然后再让 Cursor 帮你补全代码。当代码补全后,我们需要对代码进行检查,看看是否是我们想要的功能,如果有错误,我们需要对代码进行手动修改。

于是我就用这种方式开始了我的 Go 语言开发之旅,找到修改代码的位置,然后让 Cursor 帮我补全代码,然后我再对代码进行检查,如果有问题则修改,没有问题则进行测试,一直重复这个过程,直到功能开发完成为止。

这种方式能让我快速地使用 Go 语言开发功能,而且能够快速的学习 Go 语言,在开发过程中,如果对以前的代码或者生成的代码不清楚,我就随时和 Cursor 进行对话,让它帮我解答问题。

短暂的快乐

愉快的时光总是短暂的,在我的频繁使用下很快就超过了 Cursor 的免费限制,当 Cursor 提示我无法再进行代码补全时,我开始考虑是否要充值。因为 Cursor 的价格整整是 Copilot 的 2 倍(Copilot 是 10 美元一个月,而 Cursor 是 20 美元一个月),而且我前段时间刚购买了一年的 Copilot,我真的需要两个 AI 代码编辑器吗?

经过反复权衡和艰难抉择,我还是决定充值一个月的 Cursor 试试,因为短暂的使用让我感觉到了 Cursor 的强大,我相信它能帮我更快地完成这个项目。同时我也有点后悔购买了一年的 Copilot,应该按月购买,这样可以灵活更换到其他服务,虽然这样会贵一点,但至少不会浪费。

如果让我重新选择的话,我会选择 Cursor,因为 Copilot 有的功能 Cursor 都有,而 Cursor 有的功能 Copilot 并没有,而且在整体使用体验上,我更喜欢 Cursor。

后续

到目前为止,我已经使用了 Cursor 2 个星期了,项目进度进展顺利,Go 语言的基础也掌握的差不多了,现在我已经能独立开发一个完整且比较复杂的前后端功能。在这个过程中,我之所以能够快速掌握 Go 语言,我想有这么几个原因:

  • 我有过其他语言开发经验,这样阅读 Go 语言的代码并不会觉得特别困难
  • 项目之前的代码写的比较清晰规范,让人阅读起来比较容易
  • Cursor 真的给我很大的帮助,不管是代码补全还是 AI 问答,都能让我快速地学习

使用心得

这里介绍一下我在使用 Cursor 这段时间的一些心得和体会,因为我之前也使用过 Copilot,所以我会和 Copilot 进行一些对比。

速度快

Cursor 给我第一个直观的感受就是,在代码补全方面基本上是秒出结果,而我在使用 Copilot 时,经常看到右下角的 Copilot 图标在转圈,需要让我等待。我认为速度是代码编辑器的一个关键因素,因为在编码过程中,我们希望工具能够高效响应,避免任何卡顿或延迟,以保持开发效率。

兼容 VSCode

Cursor 兼容 VSCode,可以导入 VSCode 的所有配置信息,包括快捷键设置、代码模板、插件等,因为我之前主要使用 VSCode 进行开发,所以 Cursor 能让我无缝切换到它上面。

每个项目有单独的对话历史

在 Cursor 中与 AI 进行对话后,Cursor 会保存每一次对话记录,这样你可以随时查看之前的对话记录,而且这些对话记录是按照项目来保存的,这样不会将不同的项目的对话记录混在一起,非常方便。后面我看了一下 Copilot,发现 Copilot 也有这个功能,但我之前并没有发现。

代码补全在中间也可以补全

在 Cursor 中,代码补全不仅可以在代码的末尾补全,还可以在代码的中间补全,而这一点 Copolit 就无能为力了,后者只能在代码的末尾补全。

可以设置系统提示词

Cursor 可以设置 AI 问答的系统提示词,比如像我们母语为中文的开发人员,我们可以让 AI 都用中文来回答问题,而这一点 Copilot 也是不支持的。

随时随地和 AI 聊天

Cursor 可以随时随地和 AI 进行对话,不管你是否有在编码,它主要通过以下几种方式进行对话:

  • 使用快捷键 CMD + L 随时开启对话(同样的快捷键也可以关闭对话),如果选中代码再按快捷键,选中的代码会作为问题的上下文
  • 使用快捷键 CMD + SHIFT + L 可以将选中的代码追加到当前对话中,并进行提问
  • 如果代码有报错或者警告信息,将鼠标移动到代码处,Cursor 会提示咨询 AI,这样可以将报错或警告信息作为问题的上下文,然后进行提问

重构

在 VSCode 中有代码重构的功能,但操作起来比较复杂,而 Cursor 利用代码补全功能,可以很方便地进行重构。比如重命名一个变量,只需要简单的改名字,然后一路按 Tab 键就可以了,如果在补全过程中发现代码格式不对,按 Tab 键时还可以自动格式化代码。


并非无所不能

Cursor 并非无所不能,也有很多东西它是做不到的。之前我尝试了一个比较复杂的问题,我将前端项目和后端项目一起放到 Cursor 中,然后在 AI 问答中上传了前端页面的图,咨询 AI 图中的某个按钮对应的后端 API 代码在哪个文件,基于整个代码库的方式进行提问。

结果给 Cursor 不仅找不到对应的后端文件,还编造了一些后端文件。然后我降低了问题的难度,只让 Cursor 找出图片中按钮的前端代码,同样地,Cursor 也没有找到对应的前端文件,还是编造了一些前端文件。

从目前情况看,Cursor 可能在图片解析方面还有问题,或者在大而复杂的问题上不够聪明,并不能像人类一样理解问题的意图,但我相信随着 AI 技术的发展,这些问题都会逐渐解决。

一些思考

未来的编程趋势将显著受到 AI 技术的影响,随着 AI 技术的快速发展,越来越多的编程工具开始集成智能代码生成能力。AI 生成代码不仅能够加快开发速度,还能帮助开发者减少重复性劳动,使他们能够将更多时间投入到创新和复杂问题的解决中。但 AI 生成的代码可能存在逻辑错误、安全漏洞或不符合项目特定需求的问题,因此开发者需要对 AI 生成的代码进行仔细的审查和测试,确保其质量和可靠性。所以以后的编码过程可能是代码完全由 AI 生成,人类对生成的代码进行审查,然后让 AI 不断按照人类的要求进行修改,直到生成最终的代码。

总结

在这篇文章中,我分享了我在使用 Cursor 开发新项目时的一些心得和体会,我认为 Cursor 是一个非常强大的 AI 代码编辑器,它可以帮助开发者快速地学习新技术和开发新项目,提高开发效率。虽然 Cursor 也有一些不足之处,但我相信随着 AI 技术的发展,这些问题都会逐渐解决。我希望未来的编程工具能够更加智能,让开发者能够更加高效地进行编程工作。

关注我,一起学习各种人工智能和 GenAI 新技术,欢迎交流,如果你有什么想问想说的,欢迎在评论区留言。

赞赏

Comments