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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

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

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

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

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

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

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

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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