如果把一个函数,当做参数传递给另外一个函数,如果捕捉这个作为参数的函数,的报错信息,怎么返回得到?

fancyecommerce · · 761 次点击
我照当方法了,代码如下: ``` func MC(collection string, f func(*mgo.Collection) error ) error { session := Session() defer func() { session.Close() if err := recover(); err != nil { // Log("M", err) } }() c := session.DB(databaseName).C(collection) return f(c) } ``` ``` err = mongodb.MC(traceInfo.TableName(), func(coll *mgo.Collection) error { // c.Find(bson.M{"_id": id}).One(traceInfo) //traceInfo.Id_ = bson.NewObjectId() err := coll.Insert(traceInfo) return err }) ``` 函数需要定义返回值类型
#2
更多评论
我照当方法了,代码如下: ``` func MC(collection string, f func(*mgo.Collection) error ) error { session := Session() defer func() { session.Close() if err := recover(); err != nil { // Log("M", err) } }() c := session.DB(databaseName).C(collection) return f(c) } ``` err := mongodb.MC(traceInfo.TableName(), func(coll *mgo.Collection) error { // c.Find(bson.M{"_id": id}).One(traceInfo) //traceInfo.Id_ = bson.NewObjectId() err := coll.Insert(traceInfo) return err })
#1
对于函数MC,第二个参数是函数类型,`f func(*mgo.Collection) error `, 除了定义函数传递的参数,还定义了函数的返回参数, 因此传递的函数也需要有error类型的返回参数。 对于第二个函数,调用的时候`func(coll *mgo.Collection) error`,该函数的返回类型必须是error。 这样调用`mongodb.MC()`函数的返回值,就是 `err := coll.Insert(traceInfo)` 的返回值了
#3