编组与私人领域结合

作为一名优秀的开发人员,你已使用导出和未导出的字段创建了以下结构:

type MyStruct struct {
    uuid string    
    Name string
}

游乐场中的示例: https//play.golang.org/p/Zk94Il2ANZ

现在,你希望将此结构转换为有效的 JSON,以便存储在 etcd 之类的内容中。但是,由于 uuid 没有导出,json.Marshal() 会跳过它。该怎么办?使用匿名结构和 json.MarshalJSON() 接口! 这是一个例子:

type MyStruct struct {
    uuid string    
    Name string
}

func (m MyStruct) MarshalJSON() ([]byte, error {
    j, err := json.Marshal(struct {
        Uuid string
        Name string
    }{
        Uuid: m.uuid,
        Name: m.Name,
    })
    if err != nil {
           return nil, err
    }
    return j, nil
}

游乐场中的示例: https//play.golang.org/p/Bv2k9GgbzE