>백엔드 개발 >Golang >성능 향상을 위해 XML을 Go 맵으로 직접 비정렬할 수 있습니까?

성능 향상을 위해 XML을 Go 맵으로 직접 비정렬할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-03 13:33:14235검색

Can XML be Unmarhaled Directly into a Go Map to Improve Performance?

XML을 맵으로 직접 역마샬링

문제:

XML을 구조체로 역마샬링한 다음 맵으로 변환 대규모 데이터 세트의 경우 시간이 많이 걸립니다. 지도로 직접 비정렬화하는 방법이 있나요?

XML:

<classAccesses>
    <apexClass>AccountRelationUtility</apexClass>
    <enabled>true</enabled>
</classAccesses>

현재 구조체:

type classAccesses struct {
    ApexClass string `xml:"apexClass"`
    Enabled   string `xml:"enabled"`
}

type diffs struct {
    ClassAccesses []classAccesses `xml:"classAccesses"`
}

원함 맵:

map[string]string {
    "ApexClass": "enabled"
}

해결책:

xml.Unmarshaller 인터페이스를 구현하여 데이터를 맵[문자열]문자열로 직접 마샬링합니다.

type classAccessesMap struct {
    m map[string]string
}

func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    c.m = map[string]string{}

    key := ""
    val := ""

    for {
        t, _ := d.Token()
        switch tt := t.(type) {

        // Parse the inner structure
        case xml.StartElement:
            fmt.Println(">", tt)

        case xml.EndElement:
            fmt.Println("<", tt)
            if tt.Name == start.Name {
                return nil
            }

            if tt.Name.Local == "enabled" {
                c.m[key] = val
            }
        }
    }
}

일부 해결 방법:

부분 구현을 보려면 https://play.golang.org/p/7aOQ5mcH6zQ를 방문하세요.

위 내용은 성능 향상을 위해 XML을 Go 맵으로 직접 비정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.