gpt4 book ai didi

database - golang 和 boltdb : using closures to wrap a bucket ForEach function

转载 作者:IT老高 更新时间:2023-10-28 21:18:55 25 4
gpt4 key购买 nike

在我的代码中,我使用了很多重复代码来迭代bolddb 数据库中的嵌套桶。我想做一些重构,将这些重复的代码包装成新的函数。

我知道我需要为此使用闭包,但是额外的 db.View 层让我很头疼。

更准确地说,我想将 bucket.ForEach 函数包装成一个新函数。该函数创建数据库的 View 事务,选择嵌套的存储桶并返回一个新函数,让我可以遍历给定的存储桶。

新创建的代码的代码签名是这样的:

ForEachBucket(bucket_name string, *bolt.DB) func() {}

我要包装的代码:

func ForEachBucket(bucketname string, db *bolt.DB)  {

db.View(func(tx *bolt.Tx) error {
rootBkt := tx.Bucket([]byte("rootbucket")) // always the same
interestingBkt := rootBkt.Bucket([]byte(bucketname))
if nestedBkt := interestingBkt.Bucket([]byte("underlying")); nestedBkt != nil {
mapBkt.ForEach(func(k, v []byte) error {
// do something here
}
})
return nil
})
}

我想创建一个新函数(使用闭包)来包装上述代码并返回一个类似 foreach 的函数。

最佳答案

我并没有真正捕获你想要的东西,但我会尽力回答。

您可能有一个传递给 ForEach 的回调参数

    func ForEachBucket(db *bolt.DB, bucketname string, f func(b *bolt.Bucket) error {
// ...
return mapBucket.ForEach(f) // do not forget about returned error here
}

更一般的:https://play.golang.org/p/LQlZHOWZTfi

关于database - golang 和 boltdb : using closures to wrap a bucket ForEach function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55563933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com