我想知道如何使用go的继承版本访问单个特定字段?

现在我有3个结构,Trade结构是所有其他结构的基本结构,但是我的另外两个结构只需要基本结构中的几个字段。无论如何,仅继承那些结构?

我希望请求的主体为Trade Struct,然后将其转换为internalTrade,最后我想返回tradesubmmited响应。

type Trade struct {
    ClientTradeId string `json:"clientTradeId"`
    Date          int    `json:"date"`
    Quantity      string `json:"quantity"`
    Price         string `json:"price"`
    Ticker        string `json:"ticker"`
}
type InternalTrade struct {
    Id string `json:"Id"`
    Trade *Trade `json:"Trade"`
}

type TradeSubmitted struct {

    TradeId string `json:"TradeId"`
    Trade *Trade `json:"ClientTradeId"`

}

func createTrade(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    var trade Trade
    var internalTrade InternalTrade
    var tradeSubmitted TradeSubmitted

    _ = json.NewDecoder(r.Body).Decode(&trade)


    internalTrade.Id = string(rand.Intn(1000000))
    internalTrade.Trade.ClientTradeId = trade.ClientTradeId
    internalTrade.Trade.Date = trade.Date
    internalTrade.Trade.Quantity = trade.Quantity
    internalTrade.Trade.Price = trade.Price
    internalTrade.Trade.Ticker = trade.Ticker

    tradeSubmitted.Trade.ClientTradeId = trade.ClientTradeId
    tradeSubmitted.TradeId = internalTrade.Id

    trades = append(trades, internalTrade)

    json.NewEncoder(w).Encode(&tradeSubmitted)

}

最佳答案

第一:嵌入不是继承。在您的模型中,Trade只是结构的一个字段。

看起来在您的模型中InternalTrade只是带有id的Trade。初始化InternalTrade的方式是错误的,因为internalTrade.Trade为nil,并且您将nil-pointer的成员设置为结构。反而:

internalTrade.Id = string(rand.Intn(1000000))
internalTrade.Trade=&trade

或者:
type InternalTrade struct {
    Id string `json:"Id"`
    Trade Trade `json:"Trade"`
}


internalTrade.Id = string(rand.Intn(1000000))
_ = json.NewDecoder(r.Body).Decode(&internalTrade.Trade)

最后,TradeSubmitted实际上与Trade没有任何共同之处,您可以
type TradeSubmitted struct {
    TradeId string `json:"TradeId"`
    ClientTradeID string `json:"ClientTradeId"`
}

09-30 18:55