一尘不染

防止bson.ObjectIdHex中的运行时出现紧急情况

go

我正在尝试使用mgo将objectid字符串转换为bson ObjectId格式,

errCheck := d.C("col").FindId(bson.ObjectIdHex(obid[0])).One(&Result)

idk为什么,但是如果我输入了错误/无效的输入字符串,我的应用程序就会出现运行时恐慌

我该如何预防呢?谢谢


阅读 288

收藏
2020-07-02

共1个答案

一尘不染

bson.ObjectIdHex()
文档,如果您传递无效的对象ID将恐慌:

ObjectIdHex从提供的十六进制表示形式返回ObjectId。 以无效的十六进制表示形式调用此函数将导致运行时恐慌。
请参见IsObjectIdHex函数。

如果要避免这种情况,请先使用来检查输入字符串bson.IsObjectIdHex(),然后仅bson.ObjectIdHex()在输入有效时才继续调用:

if bson.IsObjectIdHex(obid[0]) {
    // It's valid, calling bson.ObjectIdHex() will not panic...
}
2020-07-02