解组 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
}
}
添加接口似乎是个好主意,因为您想在多个应用程序中将其用作服务。
我在 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
}
}
添加接口似乎是个好主意,因为您想在多个应用程序中将其用作服务。