加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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
并返回Json输出.但是下面的函数会抛出一个错误
怎么称赞这个?

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值以供以后处理时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读