在 Go 專案使用 Packr 編譯靜態資源

做法

安裝套件。

1
go get -u github.com/gobuffalo/packr/v2/packr2

載入檔案

使用 packr.New() 方法指定靜態資源的目錄,並將檔案載入。

1
2
3
4
5
6
7
func main() {
box := packr.New("new", "./public")
html, err := box.FindString("index.html")
if err != nil {
log.Fatalln(err.Error())
}
}

渲染頁面

如果要渲染一個頁面,可以使用以下方式:

1
2
3
4
5
6
7
8
9
10
11
func Index(w http.ResponseWriter, r *http.Request) {
box := packr.New("new", "../public")
html, err := box.FindString("index.html")
if err != nil {
log.Fatalln(err.Error())
}
tmpl, err := template.New("index").Parse(html)
if err := tmpl.Execute(w, nil); err != nil {
log.Fatalln(err.Error())
}
}

靜態資源伺服器

為了提供 CSS 和 JavaScript 等靜態資源,靜態資源伺服器的使用如下:

1
2
3
4
5
6
func main() {
box := packr.New("assets", "./public/assets")

http.Handle("/", http.FileServer(box))
http.ListenAndServe(":3000", nil)
}

搭配 Mux 路由的使用如下:

1
2
3
4
5
6
func main() {
r := mux.NewRouter()
box := packr.New("assets", "./public/assets")
r.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", http.FileServer(box)))
log.Fatalln(http.ListenAndServe(":3000", r))
}

編譯

使用 packr 執行檔進行編譯。

1
packr build

參考資料