我正在嘗試使用html/templatestruct 格式決議 JSON。
func handler(w http.ResponseWriter, r *http.Request) {
var issueList = template.Must(template.New("template01").ParseFiles("template01.tmpl"))
result, err := SearchIssues(os.Args[1:])
if err != nil {
log.Fatal(err)
}
if err := issueList.Execute(w, result); err != nil {
log.Fatal(err)
}
}
該函式SearchIssues用于將流轉換為JSON格式,效果很好。
然后我嘗試使用決議html/templateJSON
var issueList = template.Must(template.New("template01").ParseFiles("template01.tmpl"))
當我訪問本地服務時,出現錯誤:XXX is an incomplete or empty template。
但是當我洗掉New("template01").程式運行良好。
像這樣:
func handler(w http.ResponseWriter, r *http.Request) {
var issueList = template.Must(template.ParseFiles("template01.tmpl"))
result, err := SearchIssues(os.Args[1:])
if err != nil {
log.Fatal(err)
}
if err := issueList.Execute(w, result); err != nil {
log.Fatal(err)
}
}
我不是母語人士,英語不是很好,對不起。
uj5u.com熱心網友回復:
您的第一個代碼的問題在于,當您這樣做時:
var issueList = template.Must(template.New("template01").
ParseFiles("template01.tmpl"))
template.New()將創建一個名為"template01". 該變數issueList將參考這個空模板。您呼叫它的方法,該方法將決議檔案并創建一個名為. 該變數仍將參考模板,而不是從檔案中決議的那個。當您呼叫 時,它會執行(默認)模板指定,即空的. 這就是你得到錯誤的原因。Template.ParseFiles() "template01.tmpl""template01.tmpl"issueListtemplate01Template.Excute()issueListtemplate01incomplete or empty template
在您的第二個版本中:
var issueList = template.Must(template.ParseFiles("template01.tmpl"))
您呼叫函式,它決議檔案并回傳其模板。所以將參考檔案中決議的模板,而不是空模板。所以將執行這個模板。template.ParseFiles() "template01.tmpl"issueListTemplate.Execute()
注意:如果在第一種情況下使用Template.ExecuteTemplate(),則可以命名要執行的模板:
if err := issueList.Execute(w, "template01.tmpl", result); err != nil {
log.Fatal(err)
}
這將成功,因為您明確告訴"template01.tmpl"從檔案中執行決議,而不是默認的空模板。
另請注意,您不應該在處理程式中決議模板,它很慢。在此之前對其進行一次決議,將結果存盤在包級變數中,然后在處理程式中執行它。有關詳細資訊,請參閱在 Golang 中使用“模板”包向客戶端生成動態網頁時需要太多時間
有關關聯模板的詳細資訊,請參見Go 模板名稱。
也請使用encoding/json生成 JSON 輸出而不是text/templateor html/template。模板引擎對 JSON 格式和編碼一無所知,很容易生成無效的 JSON。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512040.html
標籤:去模板去模板
上一篇:如何在helm中將字串連接到.AsConfig的結果?
下一篇:為什么這不列印出20個問候語?
