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

Unmarshal XML to struct and convert to slice

我在 Golang 中有一个简单的项目,我用它来学习这门语言。我正在开发的 "service" 的主要目的是 运行 一个守护进程来保存暴露为 XML 的 URL。这样我就可以 "produce" 我自己的稍后阅读服务。到目前为止,一切都很好 :)。您可以在此处找到该项目:https://github.com/rogierlommers/readinglist-golang

我使用 Gin-Gonic 作为服务框架 html。我已经设法读取了一个 xml 文件,对其进行了解组,但现在我想向这个 "thing" 添加一些新数据。换句话说:我想我需要把它转换成一个切片,但我不知道如何管理它。

F.e。端点 r.GET("/add/:url") 应该使用函数 util.AddRecord 将新的 url 插入到切片中。但是怎么办?

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

在对您的问题发表评论时,您提出了以下问题:

I first need to create a slice, right?

答案是肯定的,但是您的 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