Я хочу создать микросервис, который использует jrpc2 и mongodb для управления небольшими устройствами IoT.Это библиотеки, о которых идет речь:
https://godoc.org/bitbucket.org/creachadair/jrpc2
https://godoc.org/github.com/globalsign/mgo
Проблема в том, что, будучи довольно новым для Голанга в целом, я не уверен, какобъединить эти вещи вместе.Вот код, который у меня есть:
func DeviceAdd(ctx context.Context) (map[string]string, error) {
m := make(map[string]string)
m["token"] = "0xdeadbeef"
return m, nil
}
func DeviceBootstrap(ctx context.Context, params map[string]string) (map[string]string, error) {
m := make(map[string]string)
m["entered_token"] = params["token"]
return m, nil
}
...
func NewServer() *jrpc2.Server {
assigner := jrpc2.MapAssigner{
"device_add": jrpc2.NewHandler(DeviceAdd),
"device_bootstrap": jrpc2.NewHandler(DeviceBootstrap),
"device_update": jrpc2.NewHandler(DeviceUpdate),
"device_get_status": jrpc2.NewHandler(DeviceGetStatus),
}
srv := jrpc2.NewServer(assigner, nil)
return srv
}
По сути, вы пишете некоторые базовые функции, которые принимают context.Context или любые другие параметры JSON-RPC, а jrpc2.NewHandler (функция) присоединяет их к jrpc2.Сервер.
Проблема в том, что я не могу изменить сигнатуры обработчика функций, чтобы поместить туда mgo.Session.Или я должен сделать DeviceAdd / DeviceBootstrap методы структуры, которая имеет доступ к mgo.Session?
Согласно другой вопрос StackOverflow , кажется, я должен сделать методы DeviceAdd / DeviceBootstrapstruct, в которой есть mgo.Session, но я действительно не уверен, правильно ли я ее понял, или jrpc2.NewHandler примет только что преобразованные методы, или это правильно.Кроме того, контекст Голанга. Контекст кажется подходящим местом, чтобы поместить такую вещь.Помогите!