文章首发于:clawhub.club
最近再做一个小型邮件发送服务,需要用mongo记录一下邮件发送历史。虽说网上一大堆教程都是不建议用mongo官方的go版本,但是我还是用了,感觉简单的使用,因该碰不到啥坑吧。
github地址:
https://github.com/mongodb/mongo-go-driver
跟着示例就可以跑起来了,参考着官方文档,简单的封装了一下,以备使用。
官方文档地址:https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial
上封装的原码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package gmongo
import ( "context" "go-email/com/clawhub/pkg/logging" "go-email/com/clawhub/pkg/setting" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" "time" )
var Client *mongo.Client
type Mongo struct { Uri string TimeOut time.Duration }
var MongoSetting = &Mongo{}
func Setup() { setting.MapTo("mongo", MongoSetting) var err error Client, err = mongo.Connect(GetContext(), options.Client().ApplyURI(MongoSetting.Uri)) if err != nil { logging.AppLogger.Fatal("open mongodb fail") } err = Client.Ping(GetContext(), readpref.Primary()) if err != nil { logging.AppLogger.Fatal("ping mongodb fail") } }
func GetContext() (ctx context.Context) { ctx, _ = context.WithTimeout(context.Background(), MongoSetting.TimeOut) return }
|
配置文件
1 2 3
| [mongo] Uri = mongodb://username:password@192.168.0.188:27017 TimeOut=10s
|
这可能是最简单的封装了。
简单调用一下,在main中,调用
1 2
| //mongo设置 gmongo.Setup()
|
之后系统启动时,自动加载mongo
插入一条数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| type Mail struct { Subject string ToAddress string ToName string Body string Time string Res string }
func (m *Mail) Send() { collection := gmongo.Client.Database("email").Collection("email") _, err = collection.InsertOne(gmongo.GetContext(), m) if err != nil { logging.AppLogger.Error("insert mongo mail fail", zap.Error(err)) } }
|
再说一下插入时间的问题,发现Go对时间的处理好像不是很强大,必须用time.Now().Format(“2006-01-02 15:04:05”) ,怪怪的。