我有一个非常简单的降价应用程序在go中工作得很好,但我真的很难对页面上的索引帖子的顺序进行排序,并希望在文件中有一个巧妙的方法来执行此操作。任何帮助表示赞赏。
html是
<section>
{{range .}}
<a href="/{{.File}}"><h2 class="h2_home">{{.Title}} ({{.Date}})</h2></a>
<p>{{.Summary}}</p>
{{end}}
</section>
并且索引页面的go内容如下
func getPosts() []Post {
a := []Post{}
files, _ := filepath.Glob("posts/*")
for _, f := range files {
file := strings.Replace(f, "posts/", "", -1)
file = strings.Replace(file, ".md", "", -1)
fileread, _ := ioutil.ReadFile(f)
lines := strings.Split(string(fileread), "\n")
title := string(lines[0])
date := string(lines[1])
summary := string(lines[2])
body := strings.Join(lines[3:len(lines)], "\n")
htmlBody := template.HTML(blackfriday.MarkdownCommon([]byte(body)))
a = append(a, Post{title, date, summary, htmlBody, file, nil})
}
return a
}
我暂时没有看它,因为它只是工作,但我真的想在文件中添加一些内容以支持订购。 .md文件格式为
Hello Go lang markdown blog generator!
12th Jan 2015
This is a basic start to my own hosted go lang markdown static blog/ web generator.
### Here I am...
This entry is a no whistles Hello ... etc
答案 0 :(得分:-2)
请参阅sort包中的sort.Slice。这是一个example用法。
对于你的特定问题,你有一个切片a []帖子,所以就像这样调用sort.Slice:
sort.Slice(a, func(i, j int) bool { return a[i].title < a[j].title })
这只是根据标题对切片a的所有成员进行排序(假设您可以访问此包中Post的私有字段,如果不是,则需要添加函数)。
如果您这样做,您的片段将按标题(或您希望的任何其他标准)排序,也许您可以给用户选择标题或日期?)。您无需调整降价文件。
如果你想对日期进行排序,你的帖子应该首先用时间包解析日期,这样你才能拥有真实的日期,而不仅仅是一个字符串。
这样的事情(假设帖子上有time.Time):
// parse dates
date,err := time.Parse("2nd Jan 2006",string(lines[1]))
if err != nil {
// deal with it
}
// later, sort the slice
sort.Slice(a, func(i, j int) bool { return a[i].date.Before(a[j].date)})