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
相关产品推荐
相关产品推荐

