【发布时间】:2021-07-08 10:53:47
【问题描述】:
我有一个类似的界面{} -
Rows interface{}
在 Rows 界面中,我放置了 ProductResponse 结构体。
type ProductResponse struct {
CompanyName string `json:"company_name"`
CompanyID uint `json:"company_id"`
CompanyProducts []*Products `json:"CompanyProducts"`
}
type Products struct {
Product_ID uint `json:"id"`
Product_Name string `json:"product_name"`
}
我想访问 Product_Name 值。如何访问这个。 我可以使用“reflect”pkg 访问外部值(CompanyName、CompanyID)。
value := reflect.ValueOf(response)
CompanyName := value.FieldByName("CompanyName").Interface().(string)
我无法访问 Products 结构值。该怎么做?
【问题讨论】:
-
不要过多使用空接口。看看 Rob Pike 的“围棋谚语”
-
这是代码异味。接口描述的是行为,而不是数据。更好的方法是将 getter 方法添加到您的接口(例如
type Rows interface{ CompanyProducts() []*Products },然后让您的ProductResponse结构满足该接口(在实现中,只需返回结构字段)。