【问题标题】:How to insert math/big.Int in mongo via mgo in golang如何通过 golang 中的 mgo 在 mongo 中插入 math/big.Int
【发布时间】:2013-09-03 06:39:45
【问题描述】:

我有一个包含math/big.Int 字段的结构。我想使用mgo将结构保存在mongodb中。在我的情况下,将数字保存为字符串就足够了。

我查看了可用字段的标签,没有任何接缝可以允许自定义序列化程序。我期待实现一个类似于encoding/json.Marshaler 的接口,但我在文档中发现没有这样的接口。

这是我想要我需要的一个简单的例子。

package main

import (
    "labix.org/v2/mgo"
    "math/big"
)

type Point struct {
    X, Y *big.Int
}

func main() {
    session, err := mgo.Dial("localhost")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("test").C("test")
    err = c.Insert(&Point{big.NewInt(1), big.NewInt(1)})
    if err != nil { // should not panic
        panic(err)
    }

    //  The code run as expected but the fields X and Y are empty in mongo
}

谢谢!

【问题讨论】:

    标签: mongodb go mgo


    【解决方案1】:

    类似的接口命名为bson.Getter:

    它可能看起来像这样:

    func (point *Point) GetBSON() (interface{}, error) {
        return bson.D{{"x", point.X.String()}, {"y", point.Y.String()}}, nil
    }
    

    如果你有兴趣,在setter端也有对应的接口:

    为了使用它,请注意作为参数提供的bson.Raw 类型有一个Unmarshal 方法,所以你可以有一个类似于:

    type dbPoint struct {
        X string
        Y string
    }
    

    并方便地解组:

    var dbp dbPoint
    err := raw.Unmarshal(&dbp)
    

    然后使用dbp.X 和dbp.Y 字符串将大整数放回真正的(point *Point) 被解组。

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2018-03-26
      • 2018-01-05
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多