解组XML以构造并转换为切片

时间:2015-03-09 20:10:45

标签: xml go slice

我在Golang有一个简单的项目,我用它来学习这门语言。我正在开发的“服务”的主要目的是运行一个守护进程来保存作为XML公开的URL。这样我就可以“生成”我自己的read-later服务。到现在为止还挺好 :)。您可以在此处找到该项目:https://github.com/rogierlommers/readinglist-golang

我正在使用Gin-Gonic作为服务html的框架。我已经设法读取了一个xml文件,解组它但现在我想在这个“东西”中添加一些新数据。换句话说:我认为我需要将其转换为切片,但我不知道如何管理它。

F.e。端点r.GET("/add/:url")应使用函数util.AddRecord将新url插入切片。但是如何?

[编辑] 基本上我的问题可以在这个游乐场中查看:http://play.golang.org/p/Vx0s02E12R

1 个答案:

答案 0 :(得分:2)

在您对问题的评论中,您问:

  

我首先需要创建一个切片,对吧?

答案是肯定的,但你已经在ReadingListRecords结构中有了一个切片:

type ReadingListRecords struct {
    XMLName xml.Name `xml:"records"`
    Records []Record `xml:"record"`
}

因此,您只需在该切片上调用append并传入一个新的记录结构:

records.Records = append(record.Records, Record{xml.Name{"", "record"}, 4, "url", "2015-03-09 00:00:00"})

您还可以展开ReadingListRecords结构的API,以包含一个方便的Append功能:

type RecordSet interface {
    Append(record Record) error
}

func (records *ReadingListRecords) Append(record Record) error {
    newRecords := append(records.Records, record)

    if newRecords == nil {
        return errors.New("Could not append record")
    } else {
        records.Records = newRecords
        return nil
    }
}

添加界面似乎是一个好主意,因为您希望在多个应用程序中将其用作服务。

请参阅my fork of your playground here