在Unmarshal上改变一个字符串

时间:2015-12-30 12:02:13

标签: go

我有一个Profile{}结构,其ID属性类型为uuid.UUID。当我整理此内容时,我正在将UUID转换为string,如下所示:

type Profile struct {
    Id      uuid.UUID
}

func (profile *Profile) MarshalJSON() ([]byte, error) {
    type Alias Profile
    return json.Marshal(&struct {
        Id string
        *Alias
    }{
        Id:    profile.Id.String(),
        Alias: (*Alias)(profile),
    })
}

但是,当我想要解组这个JSON时,它会抱怨id是一个字符串。因此,我需要在解组时初始化UUID结构,如下所示:uuid.New([]byte(jsonId))

这是否可以在不改变UUID实施的情况下进行,如果是,怎么做?

1 个答案:

答案 0 :(得分:0)

我建议将Id存储为字符串而不是uuid.UUID。当然有一些解决方法,但是如果你不打算在内存中保存数千Profile个,你就不应该注意到任何差异,并且你可以节省处理序列化的时间的问题。

如果您不想要,请查看您正在使用的uuid个套餐。 UUID的基础类型是否真的是一个字符串?如果它是其他内容,例如[]byte,则只需在解组之前将字符串转换为[]byte

惯用的解决方法将是Not_a_Golfer根据您的问题发表的评论。