2011-12-22 30 views
2

我是golang的新手。如何獲得模板渲染的結果

這裏是我的問題:我希望得到一個template.Execute的字符串結果,我不想直接執行它的http.ResponsWriter

這裏是我的代碼,它似乎並不運行良好

package main 

import (
    "fmt" 
    "os" 
    "template" 
) 

type ByteSlice []byte 

func (p *ByteSlice) Write(data []byte) (lenght int, err os.Error) { 
    *p = data 
    return len(data), nil 
} 

func main() { 
    page := map[string]string{"Title": "Test Text"} 
    tpl, _ := template.ParseFile("test.html") 
    var b ByteSlice 
    tpl.Execute(&b, &page) 
    fmt.Printf(`"html":%s`, b) 
} 

而且text.html:

<html> 
<body> 
    <h1>{{.Title|html}}</h1> 
</body> 
</html> 

但我得到的是

"html":</h1> 
</body> 
</html> 

回答

5

ByteSlice的寫入方法是越野車。它應該將新數據附加到已經寫入的內容,但是您的版本會替換已寫入的數據。模板代碼很可能會多次調用Write,因此您最終只能打印最後寫入的內容。

代替創建ByteSlice,請使用bytes.Buffer