gpt4 book ai didi

xml - 如何在生成 XML 时省略 GO 中的空字段

转载 作者:IT王子 更新时间:2023-10-29 00:58:51 31 4
gpt4 key购买 nike

我有以下结构:

type CustomAttribute struct {
Id string `xml:"attribute-id,attr,omitempty"`
Values []string `xml:"value,omitempty"`
}

type Store struct {
XMLName xml.Name `xml:"store"`
Id string `xml:"store-id,attr,omitempty"`
Name string `xml:"name,omitempty"`
Address1 string `xml:"address1,omitempty"`
Address2 string `xml:"address2,omitempty"`
City string `xml:"city,omitempty"`
PostalCode string `xml:"postal-code,omitempty"`
StateCode string `xml:"state-code,omitempty"`
CountryCode string `xml:"country-code,omitempty"`
Phone string `xml:"phone,omitempty"`
Lat float64 `xml:"latitude,omitempty"`
Lng float64 `xml:"longitude,omitempty"`
CustomAttributes []CustomAttribute `xml:"custom-attributes>custom-attribute,omitempty"`
}

然后我按如下方式初始化结构:

    store := &Store{
Id: storeId,
Name: row[4],
Address1: row[5],
Address2: row[6],
City: row[7],
PostalCode: row[9],
StateCode: row[8],
CountryCode: row[11],
Phone: row[10],
}

所以 CustomAttributes 数组始终为空,并且 len(store.CustomAttributes) 为 0 那么知道为什么生成的 XML 仍然包含空的“custom-attributes”标签吗?

    <custom-attributes></custom-attributes>

最佳答案

一种解决方案是使 CustomAttributes 字段成为指针。当值为 nil 时将被省略。在 Marshal 中查找“零值”文档。

package main

import (
"encoding/xml"
"fmt"
"log"
)

type Store struct {
XMLName xml.Name `xml:"store"`
CustomAttributes *[]CustomAttribute `xml:"custom-attributes>custom-attribute,omitempty"`
}

type CustomAttribute struct {
Id string `xml:"attribute-id,attr,omitempty"`
Values []string `xml:"value,omitempty"`
}

func print(store *Store) {
data, err := xml.Marshal(store)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
}

func main() {
print(&Store{})
print(&Store{
CustomAttributes: &[]CustomAttribute{},
})
print(&Store{
CustomAttributes: &[]CustomAttribute{
{Id: "hello"},
},
})
}

Playground

关于xml - 如何在生成 XML 时省略 GO 中的空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37185026/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com