rest - 使用类型嵌入访问特定字段?
问题描述
我想知道如何使用 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)
}
解决方案
第一:嵌入不是继承。在您的模型中,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"`
}
推荐阅读
- c# - EF Core 2.1 - 无法创建“MyAppContext”类型的对象。添加 'IDesignTimeDbContextFactory 的实现
'到项目中, - android - 在android中以编程方式安装APK文件
- android - 如何在 React Native 中使用 onesignal 向特定组发送推送通知?
- c# - 通过 ConfigureAwait(false) 进行线程切换
- angular - 如何禁用特定项目上的取消选择按钮(ng选择多个)
- pyspark - 将气流变量导入 PySpark
- html - CSS - 弹性属性
- aem - 我们如何在 AEM 6 的 RTE 中添加我们的自定义 css 文件?
- c# - SSIS 或 Sql 作业动态开始时间
- coding-style - 怎样做才能成为高效的程序员?