我想知道如何使用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"`
}