設定ファイルで定義されている変数を挿入できる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
_を必要とすることです。 _io.Writer
_インターフェイスを実装するファイルオブジェクトを返すos.Open()
でファイルを開こうとしました。しかし、Parse()
で使用するために、そのようなファイルオブジェクトからファイルのコンテンツを文字列として取得するにはどうすればよいですか?
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()