首页 > 解决方案 > 使用类型嵌入访问特定字段?

问题描述

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

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

我希望请求的主体是贸易结构,然后我想把它变成一个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)

}

标签: restgo

解决方案


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

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

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"`
}

推荐阅读