为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中的回调

Golang 中的回调

Go
哔哔one 2021-08-10 15:14:23
我正在使用 go-couchbase 将数据更新到 couchbase,但是,我在如何使用回调函数方面遇到了问题。该函数Update要求我传递一个回调函数,其中应该是UpdateFuncfunc (b *Bucket) Update(k string, exp int, callback UpdateFunc) error所以这就是我所做的首先,我声明了一个类型UpdateFunc:type UpdateFunc func(current []byte) (updated []byte, err error)然后在代码中,我添加以下几行:fn := UpdateFunc{func(0){}} 然后调用Update函数:bucket.Update("12345", 0, fn()}但是 Go 返回以下错误:syntax error: unexpected literal 0, expecting ) for this line fn := UpdateFunc{func(0){}}那么我做错了什么?那么我怎样才能使回调函数工作呢?附加信息谢谢你的所有建议。现在我可以按如下方式运行回调函数:myfunc := func(current []byte)(updated []byte, err error) {return updated, err }myb.Update("key123", 1, myfunc)但是,当我运行存储桶的更新功能时。我检查了沙发数据库。密钥为“key123”的文件消失了。似乎更新不会更新值而是删除它。发生了什么?
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您需要创建一个与couchbase.UpdateFunc签名匹配的函数,然后将其传递给bucket.Update.


例如:


fn := func(current []byte) (updated []byte, err error) {

    updated = make([]byte, len(current))

    copy(updated, current)

    //modify updated

    return

}


....


bucket.Update("12345",0,fn)

请注意,要传递一个函数,您只需传递fnnot fn(),这实际上会立即调用该函数并传递它的返回值。


我强烈建议停止你正在做的一切,并阅读Effective Go以及 Go博客上从Go 中的First Class Functions开始的所有帖子。


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信