gpt4 book ai didi

go - 编码 xml 字段时如何使用结构标签?

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:13 30 4
gpt4 key购买 nike

问题更多的是“可以去做吗?”然后解决实际问题。

package main

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

type Example struct {
Float Float
Float3 Float `printf:"%.3f"`
Float7 Float `printf:"%.7f"`
}

type Float float64

func main() {
e := Example{
Float: 1.0,
Float3: 2.0,
Float7: 3.0,
}

b, err := xml.MarshalIndent(e, "", " ")
if err != nil {
log.Fatal(err)
}

fmt.Println(string(b))
}

https://play.golang.org/p/Dq9M9UvwS4Q

以上示例输出:

<Example>
<Float>1</Float>
<Float3>2</Float3>
<Float7>3</Float7>
</Example>

但我希望它是:

<Example>
<Float>1</Float>
<Float3>2.000</Float3>
<Float7>3.0000000</Float7>
</Example>

所以我想使用struct 标签来影响这些字段的xml 输出格式。我不认为我相信我可以在 Float 类型上使用 MarshalXML 方法,因为那时我无权访问 struct 标记。我可以为示例类型创建一个 MarshalXML,但这意味着要从 encoding/xml/marshal.go 复制大量编码逻辑。有没有办法在编码特定字段时使用结构标签?

最佳答案

Is there a way to use struct tags when marshalling a specific field?

没有。并且有充分的理由。编码和解码是一对一的转换。如果可以进行任意格式设置,您就失去了这种保证。

如果您需要一种数据类型,其行为类似于具有三位小数精度的 float ,您应该将其设为独特的数据类型,而不是依赖于通用浮点类型的任意、有损格式。

现在,当然,您可以编写自己的库来支持任意结构标记,并且可以获得此功能。虽然这在某些情况下可能有意义,但对于 XML(或任何其他定义的数据传输格式)的编码(marshal)处理,出于上述原因,我强烈反对这样做。

关于go - 编码 xml 字段时如何使用结构标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606324/

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