dpw5865 2018-05-05 12:21
浏览 28

封送/解封bson中的类型别名

Upon my last question, I want to convert a eunm(type alias) to string when I write it to mongodb with mgo. I know I need add rules for the bson Marshal/Unmarshal, but it's different with json which I need implement UnmarshalJSON and MarshalJSON, so what should I do with bson? The code below write a number to field S, but I want the corresponding string

package main

import (
    "encoding/json"

    mgo "gopkg.in/mgo.v2"
)

type trxStatus int

type test struct {
    S trxStatus
    A string
}

const (
    buySubmitted trxStatus = iota
    buyFilled
    sellSubmiited
    sellFilled
    finished
)

var ss = [...]string{"buySubmitted", "buyFilled", "sellSubmiited", "sellFilled", "Finished"}

// that's what I do for json
func (s *trxStatus) UnmarshalJSON(bytes []byte) error {
    var status string
    json.Unmarshal(bytes, &status)
    // unknown
    for i, v := range ss {
        if v == status {
            tttt := trxStatus(i)
            *s = tttt
            break
        }
    }
    return nil
}

func (s trxStatus) MarshalJSON() ([]byte, error) {
    return json.Marshal(s.String())
}

func (s trxStatus) String() string {

    if s < buySubmitted || s > finished {
        return "Unknown"
    }

    return ss[s]
}

func main() {
    db, _ := mgo.Dial("localhost")

    s := test{S: buyFilled, A: "hello"}
    c := db.DB("test").C("test")
    c.Insert(s)
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
    • ¥15 qt6.6.3 基于百度云的语音识别 不会改
    • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
    • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
    • ¥15 lingo18勾选global solver求解使用的算法
    • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
    • ¥20 测距传感器数据手册i2c
    • ¥15 RPA正常跑,cmd输入cookies跑不出来
    • ¥15 求帮我调试一下freefem代码
    • ¥15 matlab代码解决,怎么运行