Golang中的回调

 Hmily-西瓜先生 发布于 2022-12-28 12:37

我正在使用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){}} 

然后调用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"键的文件消失了.似乎更新不更新值但删除它.发生了什么?

1 个回答
  • 您需要创建一个与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)
    

    请注意,传递一个函数,你只是传递fnfn(),这实际上会调用该函数马上并通过它的返回值.

    我强烈建议你停止你正在做的所有事情并阅读Effective Go和Go的博客上的所有帖子,从Go中的First Class Functions开始.

    2022-12-28 12:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有