我是一个刚接触Go语言的新手,但我一直在努力学习。
我正在尝试编写一些逻辑,需要检查结构体属性是否仅由一个元素组成,或者第一个元素是否仅有一个子元素。
主要结构体如下:
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"
),
)
),
);
在 `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" : { "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说我不能在interface上使用它。
如何最好地处理元素数量,以及实现这样的检查的最佳方法是什么?
reflect
包。 - sfaultinterface{}
(如果您是 Go 的新手,则根本不应使用它),而是解析为某个适当的结构体,其中包含一个 noagg 切片,并对该切片执行len
操作。 - Volker