The Xml2Json function declares a parameter named DataStruct . In the same scope, a DataStruct identifier cannot indicate a type name. If you want to use a name of type DataStruct within the same scope, you must specify your parameter in different ways.
The problem with the main function is that the function call syntax expects a list of expressions in parentheses. There you pass a type name, which obviously cannot be an expression.
So, to answer your question: No, you cannot pass a type as an argument to a function. But you can pass an instance of a type (in this case, a pointer to such an instance) to get the effect you are talking about:
package main import ( "encoding/json" "encoding/xml" "fmt" "log" ) 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> ` placeXml = ` <Places> <Place><Name>Chennai</Name><Country>India</Country></Place> <Place><Name>London</Name><Country>UK</Country></Place> </Places> ` parkXml = ` <Parks> <Park><Name>National Park</Name><Capacity>10000</Capacity></Park> <Park><Name>Asian Park</Name><Capacity>20000</Capacity></Park> </Parks> ` ) func Xml2Json(xmlString string, DataStruct interface{}) (jsobj string, err error) { if err = xml.Unmarshal([]byte(xmlString), DataStruct); err != nil { return } js, err := json.Marshal(DataStruct) if err != nil { return } return fmt.Sprintf("%s", js), nil } func main() { var p Persons jsonstring, err := Xml2Json(personXml, &p) if err != nil { log.Fatal(err) } fmt.Println(jsonstring) var q Places jsonstring, err = Xml2Json(placeXml, &q) if err != nil { log.Fatal(err) } fmt.Println(jsonstring) var r Parks jsonstring, err = Xml2Json(parkXml, &r) if err != nil { log.Fatal(err) } fmt.Println(jsonstring) }
Playground
Output:
{"Person":[{"Name":"Koti","Age":30},{"Name":"Kanna","Age":29}]} {"Place":[{"Name":"Chennai","Country":"India"},{"Name":"London","Country":"UK"}]} {"Park":{"Name":["National Park","Asian Park"],"Capacity":[10000,20000]}}
zzzz
source share