鍍金池/ 問答/GO  網(wǎng)絡(luò)安全/ golang struct 優(yōu)化

golang struct 優(yōu)化

type (

    Sale struct {
        BaseModel
        WareroomID int      `json:"wareroom_id"`
        ProductID  int      `json:"product_id"`
        Quantity   int      `json:"quantity"`
    }

    SaleLink struct {
        BaseModel
        WareroomID int      `json:"wareroom_id"`
        ProductID  int      `json:"product_id"`
        Quantity   int      `json:"quantity"`
        Product    Product  `json:"product"`
        Wareroom   Wareroom `json:"wareroom"`
    }
)

有時候在返回接口的時候 ,有時候不希望返回 關(guān)聯(lián)表 ProductWareroom , 有時候又需要, 所以定義了 2 個 struct , 感覺這樣寫 好啰嗦, 想請大佬 指導(dǎo)一下, 該如何只優(yōu)化 這個 struct, 其他代碼不用動呢?

求大佬 指導(dǎo)一下 ????

回答
編輯回答
夕顏
type SaleLink struct {
    BaseModel
    WareroomID int      `json:"wareroom_id"`
    ProductID  int      `json:"product_id"`
    Quantity   int      `json:"quantity"`
    Product    Product  `json:"product,omitempty"`
    Wareroom   Wareroom `json:"wareroom,omitempty"`
}

加上omitempty,如果你不給struct賦上這兩個值,json序列化的時候,就不會有這兩個字段

2017年4月1日 23:05
編輯回答
清夢
  • embed,這很go
 type (

    Sale struct {
        BaseModel
        WareroomID int      `json:"wareroom_id"`
        ProductID  int      `json:"product_id"`
        Quantity   int      `json:"quantity"`
    }

    SaleLink struct {
        Sale
        Product    Product  `json:"product"`
        Wareroom   Wareroom `json:"wareroom"`
    }
)
  • 序列化函數(shù),最符合func的初衷
func (sl *SaleLink) LinkJson []byte {
    return 把字段都加上,然后`Marshal`
}
func (sl *SaleLink) Json []byte {
    return 部分字段,然后`Marshal`
}
  • 表現(xiàn)類,這很設(shè)計模式
//通過sale構(gòu)建下面這兩個類,分別展現(xiàn)`json`
type LinkSaleVO struct {
}
type SaleVO struct {
}
2018年9月16日 00:23