让 cursor 教我用 cursor 的隐藏技能

1. 写在最前面

最近开发的功能中,有一个需求是需要实现一个在相同的结构体 merge 的功能,但 merge 的并非直接覆盖,而是需要做零值判断,在 src 的 value 为零值做覆盖或者 key 不存在做 merge 。举例说明:

go 复制代码
假设函数定义 func merge(src, dst any) error


type Person struct {
    Address string
    Age  string
    Name string
    Extra map[string]any
}


src = Person {
    Address: "shanghai",
    Age: "18",
    Extra: map[string]any {
      "school": map[string]string{
          "number": "10086"
        }
    }
}

dst = Person {
    Age: "20",
    Name: "happay"
    Extra: map[string]any {
      "school": map[string]string{
          "number": "10087",
          "class": "two"
        }
    }

}
期待最终 merge 的结果:
result := Person {
    Address: "shanghai",
    Age: "18",                      // 非零值,使用 src
    Name: "happy",                  // 零值,覆盖
    Extra: map[string]any {
      "school": map[string]string{
          "number": "10086",
          "class": "two"           // map 支持递归 merge
        }
    }

}

这个功能从实现的角度不算复杂,但是 cursor 倒在了 test case 修复上。

反复修复了太多次,而且消耗了过多 token,所以本着「节约成本」的原则。笔者决定先回退到原始的方案上,即 「google」

2. 原始方案

2.1 背景

虽然进入了 AI 的时代,但是原始的手艺还是不能丢,以防 Cursor 故障的时候,连代码都不会写。

尊敬的客户:

您好!北京时间 2025 年 06 月 06 日 02:57 ,阿里云监控发现 aliyuncs.com 域名解析出现异常。08:11 ,经过紧急处理,阿里云 aliyuncs.com 域名已经恢复,缓存正在刷新中,业务逐步恢复。🐶

注:世界就是一个巨大的草台班子,毕竟阿里云域名解析也会故障,故障可以理解,但是故障几个小时,就......

Google 的建议如下:

2.2 mergo 库

2.2.1 使用调研

注:从活跃度和 star 的数量来说,直接使用这个库,理论上风险可控的。

2.2.2 验证

Better Go Playground

结论:验证下来符合需求,就它了,果断替换到 cursor 之前写的代码

2.3 思考

虽然功能是完成了,但是笔者还是有一个疑问:

问题:为什么在需要 cursor 实现指定功能的时候,cursor 总是优先选择自己实现,而不是使用现成的三方代码呢?

这是 cursor 给出的答案:

注:分析下来,解释的也算是合情合理,所以我又去详细的看了 github 上关于 mergo 的说明,参见 2.2.1 小节中的使用调研。

2.4 深入思考

如果笔者在需要快速交付的项目中,想让 cursor 在实现功能的时候,优先考虑利用开源的三方库,应该如何设置呢?

注:在如何更高效的使用 cursor 方面,应该没有人比 cursor 本身更专业了吧!

尝试问了一个最基础的排序功能,发现果然可以了!

3. 碎碎念

忙碌的时候,日子就会过的飞快,一转眼这一周就又过去啦,还好这周也是有在工作中思考和学习的一周。

  • 沉没成本不参与未来决策。
  • 女性如果精神贫瘠,执着于被爱,过于渴望被认可,那无论她享有各种能力和资源,都很难救她于困境。
  • 莫等到白发催人泪,徒留悔恨增伤悲;莫使金樽空对月,今朝有酒今朝醉;莫怪青山换不回,念天地悠悠轮回; 弹指一挥这一生, 也无悔。---有被「莫等」 这几句歌词触动到!
相关推荐
fliter21 小时前
Go 1.18+ slice 扩容机制详解
后端
A黑桃21 小时前
Paimon Action Jar 实现机制分析
大数据·后端
代码笔耕21 小时前
写了几年 Java,我发现很多人其实一直在用“高级 C 语言”写代码
java·后端·架构
@我们的天空21 小时前
【FastAPI 完整版】路由与请求参数详解(query、path、params、body、form 完整梳理)- 基于 FastAPI 完整版
后端·python·pycharm·fastapi·后端开发·路由与请求
武子康21 小时前
大数据-211 逻辑回归的 Scikit-Learn 实现:max_iter、分类方式与多元回归的优化方法
大数据·后端·机器学习
一路向北North21 小时前
springboot基础(85): validator验证器
java·spring boot·后端
蜗牛^^O^21 小时前
Spark详解
后端
短剑重铸之日1 天前
《7天学会Redis》Day 1 - Redis核心架构与线程模型
java·redis·后端·架构·i/o多路复用·7天学会redis
努力的小郑1 天前
Spring 的西西弗斯之石:理解 BeanFactory、FactoryBean 与 ObjectFactory
后端·spring·面试
华仔啊1 天前
Java 异步调用失败导致系统崩溃?这份重试机制救了我
java·后端