函数代码如下:(mongodb包)
```
func MC(collection string, f func(*mgo.Collection)) {
session := Session()
defer func() {
session.Close()
if err := recover(); err != nil {
// Log("M", err)
}
}()
c := session.DB(databaseName).C(collection)
f(c)
}
```
这个函数的第二个参数是一个函数
调用:(main包,调用mongodb包的MC函数)
```
mongodb.MC(traceInfo.TableName(), func(coll *mgo.Collection) {
// c.Find(bson.M{"_id": id}).One(traceInfo)
traceInfo.Id_ = bson.NewObjectId()
err := coll.Insert(traceInfo)
})
```
对于传递的func()参数,插入操作会返回一个err参数`err := coll.Insert(traceInfo)`,
如果将err这个返回值传递main包?我尝试在函数`func(coll *mgo.Collection)` 中做`return err`,会报错
我想不出来如果得到错误信息,难道需要使用 Recover捕获异常?如果捕捉呢
对于函数MC,第二个参数是函数类型,`f func(*mgo.Collection) error `, 除了定义函数传递的参数,还定义了函数的返回参数,
因此传递的函数也需要有error类型的返回参数。
对于第二个函数,调用的时候`func(coll *mgo.Collection) error`,该函数的返回类型必须是error。
这样调用`mongodb.MC()`函数的返回值,就是 `err := coll.Insert(traceInfo)` 的返回值了
#3
更多评论
我照当方法了,代码如下:
```
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
我照当方法了,代码如下:
```
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