Go 內嵌靜態檔案工具 packr
[Go] Go 內嵌靜態檔案工具 packr
介紹一個簡單實用的 Go 內嵌靜態檔案工具 packr。
安裝
$ go get -u github.com/gobuffalo/packr/...
使用
使用 packr 打包靜態檔案非常簡單,通過建立一個 box.
// templates 是相對路徑,例子是在同一個目錄下
box := packr.NewBox("./templates")
// 以字串的形式獲取靜態檔案
html := box.String("index.html")
fmt.Println("String獲取:", html)
html, err := box.MustString("index.html")
if err != nil {
log.Fatal(err)
}
fmt.Println("MustString獲取", html)
// 以位元組陣列的形式獲取靜態檔案
htmlByte := box.Bytes("index.html")
fmt.Println("Bytes: ", htmlByte)
// 對應的還有 MustBytes 方法
packr 在查詢檔案時的解析規則:
- 在二進位制檔案中,在記憶體中查詢檔案
- 開發時,在本地查詢檔案
在 HTTP 中使用
因為 box 實現了 http.FileSystem
介面,所有可以直接用來提供靜態檔案訪問
package main
import (
"net/http"
"github.com/gobuffalo/packr"
)
func main() {
box := packr.NewBox("./templates")
http.Handle("/", http.FileServer(box))
http.ListenAndServe(":3000", nil)
}
使用 gorilla/mux
作為路由庫,mux 也有提供靜態檔案訪問的方式
r := mux.NewRouter()
box := packr.NewBox("./css")
r.PathPrefix("/css").Handler(http.StripPrefix("/css", http.FileServer(box)))
在渲染庫(render)中使用
使用 unrolled/render
庫來渲染資源,在初始化渲染選項中,將靜態檔案加入到 Asset 中。
var boxTemp = packr.NewBox("../templates")
var ren = render.New(render.Options{
Directory: "templates",
Asset: func(name string) ([]byte, error) {
// 返回指定路徑名稱的檔案資源
return boxTemp.Bytes("index.html"), nil
},
AssetNames: func() []string {
// 靜態檔案的路徑名稱
return []string{"templates/index.html"}
},
Extensions: []string{".html"},
})
使用
ren.HTML(w, http.StatusOK, "index.html", "")
打包命令
使用命令建立二進位制檔案
packr build
包括了 go build
packr install
包括了 go install
還可以使用 go generate
命令來生成靜態資原始檔(.go),
package main
// 打包靜態檔案命令,生成 packr.go 檔案
//go:generate packr
func main() {
Run()
}
然後執行命令
go generate && go build
資源
https://github.com/gobuffalo/packr
相關文章
- go編譯靜態檔案到exeGo編譯
- golang1.16內嵌靜態資源指南Golang
- Sanic 靜態檔案
- go-zero微服務框架的靜態檔案服務Go微服務框架
- nginx偽靜態檔案Nginx
- php生成靜態檔案PHP
- nginx靜態檔案快取Nginx快取
- Django靜態檔案輸出Django
- 靜態引數檔案配置
- Go 標準庫 http.FileServer 實現靜態檔案服務GoHTTPServer
- search(16)- elastic4s-內嵌檔案:nested and joinAST
- LNMP–配置靜態檔案快取LNMP快取
- nginx 只快取靜態檔案Nginx快取
- 7、靜態檔案的載入
- 靜態內部類和非靜態內部類區別
- 關於Play框架的靜態檔案框架
- asp .net core 靜態檔案資源
- iOS打包.a靜態庫檔案(入門)iOS
- Part6 靜態檔案的管理
- Django1.11.7配置靜態檔案Django
- 來玩Play框架07 靜態檔案框架
- 03 #### 讀取靜態檔案-圖片
- Django 靜態檔案管理與部署指南Django
- 啟動靜態檔案中介軟體
- Uber Go 出了個靜態分析工具 NilAway,還挺實用!Go
- Go語言中介軟體框架 Negroni 的靜態檔案處理原始碼分析Go框架原始碼
- vue 靜態檔案上傳到七牛Vue
- asp.net core 系列之靜態檔案ASP.NET
- vue中 靜態檔案引用注意事項Vue
- Django 教程之media和static靜態檔案Django
- Django基礎二靜態檔案和ORMDjangoORM
- django入門-靜態檔案-part6Django
- 檔案內容對比工具
- java靜態內部類Java
- 靜態內部類 呼叫
- Asp.Net Core入門之靜態檔案ASP.NET
- .Net Core 中介軟體之靜態檔案(StaticFiles)
- Nginx下快取靜態檔案(如css js)Nginx快取CSSJS