Golang 中的回调

标签 callback go couchbase

我正在使用 go-couchbase 将数据更新到 couchbase,但是,我在如何使用回调函数方面遇到问题。

函数 Update 需要我传递一个回调函数,其中应该是 UpdateFunc

func (b *Bucket) Update(k string, exp int, callback UpdateFunc) error

这就是我所做的

首先,我声明了一个类型UpdateFunc:

type UpdateFunc func(current []byte) (updated []byte, err error)

然后在代码中,我添加以下几行:

fn := UpdateFunc{func(0){}} 

然后调用更新函数:

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)

但是,当我运行存储桶的更新功能时。我检查了沙发数据库。 key 为“key123”的文件消失了。似乎 Update 没有更新值而是删除了它。发生了什么事?

最佳答案

您需要创建一个匹配 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)

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

我强烈建议停止您正在做的一切并阅读 Effective Go以及 Go 上的所有帖子 blogFirst Class Functions in Go 开始.

关于Golang 中的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304080/

相关文章:

python - 在每个训练周期后评估测试集上的模型

gdb - OS X Lion 调试问题

elasticsearch - 双向 xdcr elasticsearch 和 couchbase

couchbase - 用于在 couchbase 中插入文档的等效 N1ql 查询是什么

javascript - 命名空间回调函数

c++ - 可以调用的函数数组,如 'funs[1]();'

javascript for循环和超时函数

go - 检测golang方法是否是内部的?

go - 在将值设置为结构中的值时,为什么会出现“无法分配”错误?

indexing - 我应该在 Couchbase 中使用本地索引吗?