为了账号安全,请及时绑定邮箱和手机立即绑定

有没有清除此Go代码的方法?

有没有清除此Go代码的方法?

Go
猛跑小猪 2021-05-14 14:10:52
我刚刚开始学习Go,并且已经制作了一个函数,该函数使用包含一些元数据的标头解析markdown文件(这些文件是博客文章)。这是一个例子:---Some title goes here19 September 2012---This is some content, read it.我已经编写了此函数,该函数可以工作,但是我觉得它很冗长和混乱,我看过各种字符串包,但是我对Go不够了解,并且它是了解我应该成为的最佳实践。如果我能得到一些技巧来清理此问题,我将不胜感激。(另外,我知道我不应该忽略该错误)。type Post struct {    Title string    Date string    Body string}func loadPost(title string) *Post {    filename := title + ".md"    file, _ := ioutil.ReadFile("posts/" + filename)    fileString := string(file)    str := strings.Split(fileString, "---")    meta := strings.Split(str[1], "\n")    title = meta[1]    date := meta[2]    body := str[2]    return &Post{Title: title, Date: date, Body: body}}
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我同意这还不错。我将添加其他一些想法。

  • 正如Thomas所展示的,您不需要中间变量title日期和body。尝试一下

    return &Post{
        Title: meta[1],
        Date: meta[2],
        Body: body,}

    的确可以省略字段名称,但是有时候我喜欢它们使代码保持自我记录。(我认为兽医也喜欢它们。)

  • 我忙于字符串和字节片,但可能比我应该做的更多。由于您是一口气读取文件,因此您不必担心这一点。将所有内容转换为一个大字符串,然后将其切成薄片是一种便捷的操作方式,只需记住,如果保留字符串的任何部分,则会将其固定在内存中。如果您的文件很大,或者您有很多文件,而最终只保留了其中大多数文件的元数据,那么这可能不是解决之道。

  • 每个文件只有一个博客条目?如果是这样,我想我会提出托马斯建议的一种变体。验证前一个字节是---(或文件已损坏),然后使用strings.Index(fileString [3:],“ ---”)。当段数未知时,分割更合适。在您的情况下,您只是在元之后寻找单个分隔符。索引将在搜索元数据并完成之后找到它,而无需遍历整个身体。(无论如何,如果主体包含字符串“ ---”怎么办?)

  • 最后,有些人为此使用正则表达式。我还没有准备好使用正则表达式,但是无论如何,这是另一种方法。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信