2015-09-07 23 views
1

如果我有一個結構,我希望能夠通過(使用編碼/ xml)將xml中的Marhsal/Unmarshal事物 - 我怎樣才能不是打印屬性哪些是空的?如何編組xml在Go中但忽略空字段

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)) 
} 

例如看到http://play.golang.org/p/K9zFsuL1Cw

在上面的操場我不想寫我的空街道屬性;我怎麼能這樣做?

回答

4

使用omitempty標記street字段。

Go XML package

  • 一個字段包括「omitempty」選項標籤省略 如果字段值是空的。空值爲假,0,任意 無指針或接口值,以及任何數組,片段,映射或長度爲零的字符串。

在您的例子的情況下:

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)) 
} 

Playground