You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang操作MongoDB添加TTL后InsertOne报变量声明错误

问题解决:Go语言中no new variables on left side of :=错误

错误原因

在Go语言里,:=是短变量声明运算符,要求左侧必须至少包含一个未声明的新变量。你的代码中,前面已经通过_, err := c.Coll.Indexes().CreateOne(...)声明了err变量,后续再次使用_, err := c.Coll.InsertOne(...)时,err已经存在,没有新变量被声明,因此触发该错误。

修复后的代码

将第二次的:=替换为=即可,因为err已经被声明过,直接赋值就行:

indexOptions := options.Index().SetExpireAfterSeconds(int32(newUrl.Expires) * 24 * 3600)

_, err := c.Coll.Indexes().CreateOne(c.Ctx,
    mongo.IndexModel{
        Keys:    bson.M{"exp": 1},
        Options: indexOptions},
)
if err != nil {
    return nil, err
}

url := newUrl.IntoURL()

// 将 := 修改为 =,err已提前声明,无需重复短变量声明
_, err = c.Coll.InsertOne(c.Ctx, url)
return url, err

补充说明

  • 若需要同时声明新变量并给已有变量赋值,要保证左侧至少有一个全新变量,比如newVal, err := ...(此时newVal是新变量,err可复用已声明的)。
  • 短变量声明的作用域仅限当前代码块,跨代码块时需要重新声明或使用赋值语句。

内容的提问来源于stack exchange,提问作者Snek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:16:02