问题描述
现在有个硬件,它的api Post传递的参数都是xml格式。我需要用go语言调用它的接口。xml格式如下:s=1时,表示是个常量,只需传de。
<d>
<s>1</s>
<co>
<de>0</de>
</co>
</d>
s=5时,表示需要抖动。XML格式是:
<d>
<s>2</s>
<un>
<dmi>0.0</dmi>
<dma>50.0</dma>
<reo>0</reo>
<shake type_id="1">
<max>200</max>
<min>100</min>
<cycle>60</cycle>
<phase>0</phase>
</shake>
</un>
</d>
那怎么定义结构体实现使用一个结构体,可以解析出上面两种格式呢?
解决方案
type Delay struct {
S int `xml:"s"`
Co *DelayConst `xml:"co,omitempty"`
Shake *ShakeStruct `xml:"shake,omitempty"`
}
如上图定义便可,因为:
- 如果字段的标签中包含 “omitempty” 选项, 那么在字段的值为空时, 这个字段将被忽略。 空值指的是 false , 0 ,为 nil 的指针、接口值、数组、切片、map ,以及长度为 0 的字符串
根据S的值去初始化delay结构体便可。