猿问

golang中的多类型解码器

我有一个 XML 文档。某些字段具有自定义格式。例子:


<document>

  <title>hello world</title>

  <lines>

   line 1

   line 2

   line 3

  </lines>

</document>

我想将它导入到结构中,如:


type Document struct {

    Title  string   `xml:"title"`

    Lines  []string `xml:"lines"`

}

有什么方法可以实现自定义解码器,它将行字符串拆分为行数组 ( ["line 1", "line 2", "line 3"])?


可以将 Lines 字段设为字符串类型并在 xml 导入后进行拆分,但这似乎不是一个非常优雅的解决方案。有什么方法可以定义用于行拆分的自定义解码器并将其与 xml 解码器结合使用?


慕标5832272
浏览 240回答 2
2回答

慕丝7291255

以下是 CSE 建议的详细示例:type Document struct {&nbsp; &nbsp; Title&nbsp; &nbsp; string `xml:"title"`&nbsp; &nbsp; LineData string `xml:"lines"`}func (d *Document)Lines() []string {&nbsp; &nbsp; return strings.Split(d.LineData, '\n')}这类似于net/http Request所做的:将数据读入一个结构体,然后提供访问器来解释该结构体。如果您真的不想这样做,那么我使用的另一种方法是创建两个结构体。将原始数据读入第一个,然后使用它来构建第二个。如果您打算将其作为 JSON 或其他一些有线格式发送出去,则第二个结构可能只是一个映射。func (d *Document) Map() map[string]interface{} {&nbsp; &nbsp; m := make(map[string]interface{})&nbsp; &nbsp; m["lines"] = strings.Split(d.LineData, '\n')&nbsp; &nbsp; m["title"] = d.Title&nbsp; &nbsp; return m}
随时随地看视频慕课网APP

相关分类

Go
我要回答