Go语言中用xml.MarshalIndent可生成格式化XML字符串,需确保结构体字段首字母大写、添加xml标签(如xml:"name"或xml:",omitempty"),并传入结构体指针、空前缀和缩进符(如" "),错误需检查,XML声明需手动拼接xml.Header。

Go语言中用 xml.MarshalIndent 可以把结构体转成格式化(带缩进)的XML字符串,关键是要确保结构体字段可导出、有合适的XML标签,并正确调用函数。
结构体定义要规范
字段名必须大写(可导出),推荐加上 xml struct tag 明确字段名、是否省略空值、是否作为属性等:
- 字段名首字母大写,否则
xml包无法访问 -
xml:"name"指定XML元素名;xml:"name,attr"表示作为属性;xml:",omitempty"表示零值时忽略该字段 - 根元素建议用匿名字段或显式命名,避免生成多余包裹层
例如:
type Person struct {XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email,omitempty"`
}
调用 MarshalIndent 生成缩进XML
传入结构体指针、前缀(通常为空)、缩进符(如两个空格或 "\t"):
立即学习“go语言免费学习笔记(深入)”;
- 必须传指针:
&person,不然会静默失败(返回空字节) - 前缀一般设为空字符串
"";缩进符常用" "(两个空格)或"\t" - 返回
[]byte和 error,记得检查错误
示例代码:
person := Person{Name: "张三",
Age: 28,
}
data, err := xml.MarshalIndent(&person, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
输出效果示例
上面例子会输出类似:
小技巧:加XML声明头
xml.MarshalIndent 不自动加 ,如需声明,手动拼接即可:
xml.Header + string(data)-
xml.Header是常量:"\n"
基本上就这些。不复杂但容易忽略指针和字段导出规则。










