如何在golang中将数据结构作为参数传递
发布时间:2020-12-16 19:26:50 所属栏目:大数据 来源:网络整理
导读:XML到Json package mainimport ( "encoding/json" "encoding/xml" "fmt")type Persons struct { Person []struct { Name string Age int }}type Places struct { Place []struct { Name string Country string }}type Parks struct { Park struct { Name []s
XML到Json
package main import ( "encoding/json" "encoding/xml" "fmt" ) type Persons struct { Person []struct { Name string Age int } } type Places struct { Place []struct { Name string Country string } } type Parks struct { Park struct { Name []string Capacity []int } } const personXml = ` <Persons> <Person><Name>Koti</Name><Age>30</Age></Person> <Person><Name>Kanna</Name><Age>29</Age></Person> </Persons> ` const placeXml = ` <Places> <Place><Name>Chennai</Name><Country>India</Country></Place> <Place><Name>London</Name><Country>UK</Country></Place> </Places> ` const parkXml = ` <Parks> <Park><Name>National Park</Name><Capacity>10000</Capacity></Park> <Park>Asian Park</Name><Capacity>20000</Capacity></Park> </Parks> ` func WhatIamUsing() { var persons Persons xml.Unmarshal([]byte(personXml),&persons) per,_ := json.Marshal(persons) fmt.Printf("%sn",per) var places Places xml.Unmarshal([]byte(placeXml),&places) pla,_ := json.Marshal(places) fmt.Printf("%sn",pla) var parks Parks xml.Unmarshal([]byte(parkXml),&parks) par,_ := json.Marshal(parks) fmt.Printf("%sn",par) } 我想要的是一个通用函数,它采用xml字符串和dataStruct func Xml2Json(xmlString string,DataStruct interface{}) (jsobj string,err error) { var dataStruct DataStruct xml.Unmarshal([]byte(personXml),&dataStruct) js,_ := json.Marshal(dataStruct) return fmt.Sprintf("%sn",js),nil } func main() { jsonstring,_ := Xml2Json(personXml,Persons) } 错误信息: prog.go:73:DataStruct不是一个类型 prog.go:80:type Persons不是表达式 goplay链接:http://play.golang.org/p/vayb0bawKx
您不能在界面中存储类型(如人员).您可以将reflect.Type传递给您的函数.然后,你的调用看起来像Xml2Json(personXml,reflect.TypeOf(Persons)),这在我看来相当丑陋.
更好的方法可能是: func Xml2Json(xmlString string,value interface{}) (string,error) { if err := xml.Unmarshal([]byte(xmlString),value); err != nil { return "",err } js,err := json.Marshal(value) if err != nil { return "",err } return string(js),nil } 如果您对值本身不感兴趣,可以将此函数与Xml2Json(personXml,new(Persons))一起使用,并且 var persons Persons Xml2Json(personXML,&persons) 当您还想检索struct值以供以后处理时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |