你在学习golang相关的知识吗?本文《如何使用 monGo-go-driver 模拟光标》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作
你在学习golang相关的知识吗?本文《如何使用 monGo-go-driver 模拟光标》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!
问题内容我刚刚学习了 go 语言,然后使用 https://GitHub.com/mongoDB/mongo-go-driver 与 MongoDB 和 Golang 一起制作 REST api,然后我正在进行单元测试,但我陷入了困境当嘲笑 Cursor MongoDB 时,因为 Cursor 是一个结构,是一个想法还是有人创造了它?
在我看来,模拟此类对象的最佳方法是定义一个接口,因为 go 接口是隐式实现的,您的代码可能不需要那么多更改。一旦你有了一个界面,你就可以使用一些第三方库来自动生成模拟,比如 mockery
如何创建界面的示例
type cursor interface{
next(ctx context)
close(ctx context)
}
只需更改接收 mongodb 游标的任何函数即可使用自定义接口
我刚刚遇到了这个问题。因为 mongo.cursor
有一个内部字段保存 []byte
-- current
,为了完全模拟,您需要包装 mongo.cursor
。以下是我为此创建的类型:
type MongoCollection interface {
Find(ctx context.Context, filter interface{}, opts ...*options.FindOptions) (MongoCursor, error)
FindOne(ctx context.Context, filter interface{}, opts ...*options.FindOneOptions) MongoDecoder
Aggregate(ctx context.Context, pipeline interface{}, opts ...*options.AggregateOptions) (MongoCursor, error)
}
type MongoDecoder interface {
DecodeBytes() (bson.Raw, error)
Decode(val interface{}) error
Err() error
}
type MongoCursor interface {
Decode(val interface{}) error
Err() error
Next(ctx context.Context) bool
Close(ctx context.Context) error
ID() int64
Current() bson.Raw
}
type mongoCursor struct {
mongo.Cursor
}
func (m *mongoCursor) Current() bson.Raw {
return m.Cursor.Current
}
不幸的是,这将是一个移动目标。随着时间的推移,我必须向 mongocollection
接口添加新函数。
好了,本文到此结束,带大家了解了《如何使用 mongo-go-driver 模拟光标》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!
--结束END--
本文标题: 如何使用 mongo-go-driver 模拟光标
本文链接: https://lsjlt.com/news/596659.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0