如何在Go中编组xml但忽略空字段

Sek*_*ekm 4 go

如果我有一个结构,我希望能够使用(使用encoding/xml)进出xml的Marhsal/Unmarshal内容 - 我怎么能打印空的属性?

package main

import (
    "encoding/xml"
    "fmt"
)

type MyThing struct {
    XMLName xml.Name `xml:"body"`
    Name    string   `xml:"name,attr"`
    Street  string   `xml:"street,attr"`
}

func main() {
    var thing *MyThing = &MyThing{Name: "Canister"}
    result, _ := xml.Marshal(thing)
    fmt.Println(string(result))
}
Run Code Online (Sandbox Code Playgroud)

例如,请参阅http://play.golang.org/p/K9zFsuL1Cw

在上面的操场上,我不想写出我的空街道属性; 我怎么能这样做?

Grz*_*Żur 6

omitemptystreet字段上使用标志.

来自Go XML包:

  • 如果字段值为空,则省略包含"omitempty"选项的标记的字段.空值为false,0,任何nil指针或接口值,以及长度为零的任何数组,切片,映射或字符串.

如果你的例子:

package main

import (
    "encoding/xml"
    "fmt"
)

type MyThing struct {
    XMLName xml.Name `xml:"body"`
    Name    string   `xml:"name,attr"`
    Street  string   `xml:"street,attr,omitempty"`
}

func main() {
    var thing *MyThing = &MyThing{Name: "Canister"}
    result, _ := xml.Marshal(thing)
    fmt.Println(string(result))
}
Run Code Online (Sandbox Code Playgroud)

Playground