Go实战--golang中使用echo嵌入静态资源(labstack/echo、GeertJoh
生命不止,继续 go go go !!! 使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发 Web 应用,程序需要加载模板文件生成输出的 HTML。在程序部署的时候,除了发布应用可执行文件外,还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作,就有人会想办法把静态资源文件打包进 Go 的程序文件中。 参考地址: 文中提到了: 本片博客只会介绍go.rice,其余的会之后进行介绍的。 What’s an Embedded Resource? Languages as JAVA and C# support resources out of box. However,this is not the case for Golang. In order to emebed resource,we need to develop our own solution. Thankfully,there are couple of tools that are doing this for us. 参考地址: go.ricego.rice is a Go package that makes working with resources such as html,js,css,images,templates,etc very easy. github地址: Star: 1107 获取: go get github.com/GeertJohan/go.rice
go get github.com/GeertJohan/go.rice/rice
FindBox // find a rice.Box
templateBox,err := rice.FindBox("your-resource-directory")
if err != nil {
log.Fatal(err)
}
// get file contents as string
tmpl,err := templateBox.String("your_asset.tmpl")
if err != nil {
log.Fatal(err)
}
Embedded resource as source code rice embed-go
生成文件: <directory-name>.rice-box.go
Embedded resource as an archive Embedded resource as an syso resource rice embed-syso
go build -o <program>
rice append --exec <program>
echo中使用go.rice代码main.go: package main
import (
"net/http"
"github.com/GeertJohan/go.rice"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
// the file server for rice. "app" is the folder where the files come from.
assetHandler := http.FileServer(rice.MustFindBox("app").HTTPBox())
// serves the index.html from rice
e.GET("/",echo.WrapHandler(assetHandler))
// servers other static files
e.GET("/static/*",echo.WrapHandler(http.StripPrefix("/static/",assetHandler)))
e.Logger.Fatal(e.Start(":1323"))
}
跟main.go同一级,新建一个文件夹app,放入文件file.txt 执行: rice embed-go
生成了 rice-box.go: package main
import (
"github.com/GeertJohan/go.rice/embedded"
"time"
)
func init() {
// define files
file2 := &embedded.EmbeddedFile{
Filename: "file.txt",FileModTime: time.Unix(1511406219, 0),Content: string(""),}
// define dirs
dir1 := &embedded.EmbeddedDir{
Filename: "",DirModTime: time.Unix(1511406219,ChildFiles: []*embedded.EmbeddedFile{
file2,// "file.txt"
},}
// link ChildDirs
dir1.ChildDirs = []*embedded.EmbeddedDir{}
// register embeddedBox
embedded.RegisterEmbeddedBox(`app`,&embedded.EmbeddedBox{
Name: `app`,Time: time.Unix(1511406219,Dirs: map[string]*embedded.EmbeddedDir{
"": dir1,},Files: map[string]*embedded.EmbeddedFile{
"file.txt": file2,})
}
执行: go build
生成文件:embed_resources.exe 运行embed_resources.exe (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |