亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

讀取文件作為模板,執行并寫回

讀取文件作為模板,執行并寫回

Go
神不在的星期二 2021-11-08 15:32:51
我正在嘗試解析 CSS 文件,其中可以注入配置文件中定義的變量。目前該功能執行:根據給定的路徑參數打開文件解析文件的內容通過注入配置變量來執行模板將渲染的內容寫入控制臺而不是原始文件func parse(path string) {    f, err := ioutil.ReadFile(path)    if err != nil {        log.Print(err)        return    }    // Parse requires a string    t, err := template.New("css").Parse(string(f))    if err != nil {        log.Print(err)        return    }    // A sample config    config := map[string]string {        "textColor": "#abcdef",        "linkColorHover": "#ffaacc",    }       // Execute needs some sort of io.Writer    err = t.Execute(os.Stdout, config)      if err != nil {        log.Print("Can't execute ", path)    }}我的問題是template.Parse()需要的內容串和template.Execute()一個io.Writer作為參數。我試圖打開os.Open()返回實現io.Writer接口的文件對象的文件。但是我怎樣才能從這樣的文件對象中以字符串的形式獲取文件的內容,以便與 一起使用呢Parse()?
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

使用ParseFiles來解析模板。這段代碼基本上與問題中調用 ReadFile、template.New 和 Parse 的作用相同,但它更短。


t, err := template.ParseFiles(path)

if err != nil {

    log.Print(err)

    return

}

使用os.Create打開輸出文件。


f, err := os.Create(path)

if err != nil {

    log.Println("create file: ", err)

    return

}

一個文件是一個 io.Writer。可以直接對打開的文件執行模板:


err = t.Execute(f, config)

if err != nil {

    log.Print("execute: ", err)

    return

}

完成后關閉文件。


f.Close()


查看完整回答
反對 回復 2021-11-08
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

這是我用 Cerise Limón 的答案制作的功能


func createFileUsingTemplate(t *template.Template, filename string, data interface{}) error {

    f, err := os.Create(filename)

    if err != nil {

        return err

    }

    defer f.Close()


    err = t.Execute(f, data)

    if err != nil {

        return err

    }


    return nil

}


查看完整回答
反對 回復 2021-11-08
  • 2 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號