【发布时间】:2016-05-19 09:38:16
【问题描述】:
我是 Go 的新手,但很努力..
我正在尝试编写一些逻辑,需要检查 struct 的属性是否仅包含一个元素,或者第一个元素是否只有一个子元素。
主要结构是这样的:
type ChartOptins struct {
Filters Filter `json:"filters"`
Charts interface{} `json:"charts"`
}
图表天生就是这样的结构数组的组合:
$filters = array(
"filters" => array(
"DayStart" => "12-01-2015",
"DayEnd" => "12-05-2015",
"TimePeriods"=> array(
array("qqq","www"),
),
"lines" => array(
"first","avokado","drunduki"
)
),
"charts" => array(
"noagg" => array(
array(
"name" => "HOLD",
"type" => "line"
),
array(
"name" => "UKKR",
"type" => "line"
),
array(
"name" => "SVO",
"type" => "line"
),
),
"oracle" => array(
array(
"name" => "TDD",
"type" => "line"
),
)
),
);
进入 stuct ChartOptions 我从 POST 请求中解析 JSON。 JSON 看起来像这样:
{ "filters": { "dayStart": "11-10-2015", "dayEnd": "21-10-2015", "timePeriods": [ [ "qqq", "www" ] ], "lines": [ "first", "avokado", "drunduki" ] }, "charts": { "noagg": [ { "name": "HOLD", "type": "line" } ] } }
所以,charts 只能有 1 个源和 1 个元素,或者任何数量的源中的任何数量的元素。
"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } ] }
or
"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } , { "name": "TDD", "type": "line" } , { "name": "SVO", "type": "line" } ] }
当然,这是 Go 脚本中的 JSON 元素,我将它们解析为 interface{}。当我尝试使用len()时,Go说我不能在界面上使用它..
处理元素数量的最佳做法是什么?实现此类检查的最佳方法是什么?
【问题讨论】:
-
尝试使用
reflect包 -
你能举几个例子吗?
-
不要解析成
ìnterface{}(如果是 Go 新手,则不应使用它),而是解析成带有 noagg 切片的适当结构,并在该切片上执行len。 -
我也会尝试为此使用切片,但为此必须将每个切片的结构类型声明到树的底部...