GO Lang降价应用

时间:2017-10-31 17:11:14

标签: go markdown

我有一个非常简单的降价应用程序在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

1 个答案:

答案 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)})