use*_*268 9 io templates file go
我正在尝试解析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)
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是template.Parse()需要的内容串和template.Execute()一个io.Writer作为参数.我试图打开文件os.Open(),返回一个实现该io.Writer接口的文件对象.但是如何将文件的内容作为字符串从这样的文件对象中获取以便与其一起使用Parse()?
Cer*_*món 24
使用ParseFiles来解析模板.这段代码基本上与调用ReadFile,template.New和Parse一样,与问题相同,但它更短.
t, err := template.ParseFiles(path)
if err != nil {
log.Print(err)
return
}
Run Code Online (Sandbox Code Playgroud)
使用os.Create打开输出文件.
f, err := os.Create(path)
if err != nil {
log.Println("create file: ", err)
return
}
Run Code Online (Sandbox Code Playgroud)
文件是io.Writer.您可以直接将模板执行到打开的文件:
err = t.Execute(f, config)
if err != nil {
log.Print("execute: ", err)
return
}
Run Code Online (Sandbox Code Playgroud)
完成后关闭文件.
f.Close()
Run Code Online (Sandbox Code Playgroud)