知識點
1、mux.router
靜態資源訪問
r.PathPrefix("/js/").Handler(http.FileServer(http.Dir("./public")))
PathPrefix() 匹配引數裡 /css/ 字首的 URI , 鏈式呼叫 Handler() 指定處理器為 http.FileServer()。
http.FileServer() 是檔案目錄處理器,引數 http.Dir(“./public”) 是指定在此目錄下尋找檔案
2、Go 標準庫的模板分層
關鍵詞
define
和template
{{define ... }}
是定義模板,而 {{template ...}}
是使用模板。{{define ... }}
跟著的引數是模板的名稱,而 {{template ...}}
有兩個引數,第一個是模板,第二個是傳給模板使用的資料。
{{define "template_name"}}
{{template "template_name" .}}
3、渲染模版
filepath
: 路徑處理包filepath.Glob()
: 生成與傳參匹配的檔名稱 Slicetemplate.ParseFiles()
: 解析模板檔案Template.ExecuteTemplate()
: 渲染模板
files, err := filepath.Glob(dirPrefix + "/layouts/*.gohtml")
// 在 Slice 裡新增我們的目標檔案
newFiles := append(files, dirPrefix+"/articles/index.gohtml")
// 解析模板檔案
tmpl, err := template.ParseFiles(newFiles...)
// 渲染模板,將所有文章的資料傳輸進去
tmpl.ExecuteTemplate(w, "app", articles)
作業
app/http/controllers/page_controller
// Home 首頁
func (*PagesController) Home(w http.ResponseWriter, r *http.Request) {
view.Render(w, view.D{}, "home")
}
// About 關於我們頁面
func (*PagesController) About(w http.ResponseWriter, r *http.Request) {
view.Render(w, view.D{}, "pages.about")
}
// NotFound 404 頁面
func (*PagesController) NotFound(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
view.Render(w, view.D{}, "not_found")
}
resource/views/pages/about.gohtml
{{define "title"}}
關於我們
{{end}}
{{define "main"}}
<div class="col-md-9 blog-main">
<h1>歡迎來到goblog</h1>
此部落格是用以記錄程式設計筆記,如您有反饋或建議,請聯絡
<a href="mailto:zcold@example.com">zcold@example.com</a>
</div>
{{end}}
本作品採用《CC 協議》,轉載必須註明作者和本文連結