編組與私人領域結合

作為一名優秀的開發人員,你已使用匯出和未匯出的欄位建立了以下結構:

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