第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有清除此Go代碼的方法?

有沒有清除此Go代碼的方法?

Go
猛跑小豬 2021-05-14 14:10:52
我剛剛開始學(xué)習(xí)Go,并且已經(jīng)制作了一個函數(shù),該函數(shù)使用包含一些元數(shù)據(jù)的標(biāo)頭解析markdown文件(這些文件是博客文章)。這是一個例子:---Some title goes here19 September 2012---This is some content, read it.我已經(jīng)編寫了此函數(shù),該函數(shù)可以工作,但是我覺得它很冗長和混亂,我看過各種字符串包,但是我對Go不夠了解,并且它是了解我應(yīng)該成為的最佳實踐。如果我能得到一些技巧來清理此問題,我將不勝感激。(另外,我知道我不應(yīng)該忽略該錯誤)。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 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊

我同意這還不錯。我將添加其他一些想法。

  • 正如Thomas所展示的,您不需要中間變量title日期和body。嘗試一下

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

    的確可以省略字段名稱,但是有時候我喜歡它們使代碼保持自我記錄。(我認(rèn)為獸醫(yī)也喜歡它們。)

  • 我忙于字符串和字節(jié)片,但可能比我應(yīng)該做的更多。由于您是一口氣讀取文件,因此您不必?fù)?dān)心這一點。將所有內(nèi)容轉(zhuǎn)換為一個大字符串,然后將其切成薄片是一種便捷的操作方式,只需記住,如果保留字符串的任何部分,則會將其固定在內(nèi)存中。如果您的文件很大,或者您有很多文件,而最終只保留了其中大多數(shù)文件的元數(shù)據(jù),那么這可能不是解決之道。

  • 每個文件只有一個博客條目?如果是這樣,我想我會提出托馬斯建議的一種變體。驗證前一個字節(jié)是---(或文件已損壞),然后使用strings.Index(fileString [3:],“ ---”)。當(dāng)段數(shù)未知時,分割更合適。在您的情況下,您只是在元之后尋找單個分隔符。索引將在搜索元數(shù)據(jù)并完成之后找到它,而無需遍歷整個身體。(無論如何,如果主體包含字符串“ ---”怎么辦?)

  • 最后,有些人為此使用正則表達(dá)式。我還沒有準(zhǔn)備好使用正則表達(dá)式,但是無論如何,這是另一種方法。


查看完整回答
反對 回復(fù) 2021-05-17
  • 3 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號