在此代码中,返回的元素x没有正文 - 我相信MarshalIndent无法正常工作。 我将无法进行结构记录。 是否有任何解决方法,以便可以按预期返回值。
package main
import "fmt"
import "encoding/xml"
import "time"
type Record struct {
a int64 `xml:"a,omitempty"`
b int64 `xml:"b,omitempty"`
c int64 `xml:"c,omitempty"`
d int64 `xml:"d,omitempty"`
e int64 `xml:"e,omitempty"`
f string `xml:"f,omitempty"`
g string `xml:"g,omitempty"`
h string `xml:"h,omitempty"`
i string `xml:"i,omitempty"`
j string `xml:"j,omitempty"`
k time.Time `xml:"k,omitempty"`
l time.Time `xml:"l,omitempty"`
m string `xml:"m,omitempty"`
n string `xml:"n,omitempty"`
o string `xml:"o,omitempty"`
p int64 `xml:"p,omitempty"`
}
func main() {
temp, _ := time.Parse(time.RFC3339, "")
candiateXML := &Record{1, 2, 3, 4, 5, "6", "7", "8", "9", "10", temp, temp, "13", "14", "15", 16}
fmt.Printf("%v\n", candiateXML.a)
fmt.Printf("%v\n", candiateXML.b)
fmt.Printf("%v\n", candiateXML.c)
fmt.Printf("%v\n", candiateXML.d)
fmt.Printf("%v\n", candiateXML.e)
fmt.Printf("%s\n", candiateXML.f)
fmt.Printf("%s\n", candiateXML.g)
fmt.Printf("%s\n", candiateXML.h)
fmt.Printf("%s\n", candiateXML.i)
fmt.Printf("%s\n", candiateXML.j)
fmt.Printf("%d\n", candiateXML.k)
fmt.Printf("%d\n", candiateXML.l)
fmt.Printf("%s\n", candiateXML.m)
fmt.Printf("%s\n", candiateXML.n)
fmt.Printf("%s\n", candiateXML.o)
fmt.Printf("%v\n", candiateXML.p)
x, err := xml.MarshalIndent(candiateXML, "", " ")
if err != nil {
return
}
//why this is not printing properly
fmt.Printf("%s\n", x)
}
MarshalIndent未返回预期结果。
答案 0 :(得分:1)
The Go Programming Language Specification
可以导出标识符以允许从另一个标识符访问它 包。如果两者都导出标识符:
- 标识符名称的第一个字符是Unicode大写字母(Unicode类" Lu");和
- 标识符在包块中声明,或者是字段名称或方法名称。
醇>不会导出所有其他标识符。
导出Record
结构字段名称(第一个字符大写)以允许从xml
包访问它们。例如,
package main
import "fmt"
import "encoding/xml"
type Record struct {
A int64 `xml:"a,omitempty"`
B int64 `xml:"b,omitempty"`
C int64 `xml:"c,omitempty"`
}
func main() {
candiateXML := &Record{1, 2, 3}
fmt.Printf("%v\n", candiateXML.A)
fmt.Printf("%v\n", candiateXML.B)
fmt.Printf("%v\n", candiateXML.C)
x, err := xml.MarshalIndent(candiateXML, "", " ")
if err != nil {
return
}
fmt.Printf("%s\n", x)
}
输出:
1
2
3
<Record>
<a>1</a>
<b>2</b>
<c>3</c>
</Record>