知名网站开发哪家好,网站项目需求分析,专业群建设网站,郑州做网站找哪家好生命不止#xff0c;继续 go go go !!!使用 Go 开发应用的时候#xff0c;有时会遇到需要读取静态资源的情况。比如开发 Web 应用#xff0c;程序需要加载模板文件生成输出的 HTML。在程序部署的时候#xff0c;除了发布应用可执行文件外#xff0c;还需要发布依赖的静态资…生命不止继续 go go go !!!使用 Go 开发应用的时候有时会遇到需要读取静态资源的情况。比如开发 Web 应用程序需要加载模板文件生成输出的 HTML。在程序部署的时候除了发布应用可执行文件外还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作就有人会想办法把静态资源文件打包进 Go 的程序文件中。参考地址http://fuxiaohei.me/2016/10/1/go-binary-embed-asset.html文中提到了go-bindatago.riceesc本片博客只会介绍go.rice其余的会之后进行介绍的。What’s an Embedded Resource?An embedded resource in a application is a file that is included as part of the application. The file is not compiled, but is accessable from the code at run-time. Embedded resources can be any file type.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.参考地址http://blog.ralch.com/tutorial/golang-embedded-resources/go.ricego.rice is a Go package that makes working with resources such as html,js,css,images,templates, etc very easy.github地址https://github.com/GeertJohan/go.riceStar: 1107获取go get github.com/GeertJohan/go.ricego get github.com/GeertJohan/go.rice/rice12FindBoxfuncation to access a particular resource bundler (directory).The function is finding the correct absolute path for your resource files.// find a rice.BoxtemplateBox, err : rice.FindBox(your-resource-directory)if err ! nil { log.Fatal(err)}// get file contents as stringtmpl, err : templateBox.String(your_asset.tmpl)if err ! nil { log.Fatal(err)}12345678910Embedded resource as source code作为源码嵌入资源命令rice embed-go1生成文件.rice-box.go1Embedded resource as an archiveappends a resource as a zip file to already built executable以zip的形式附加到已经存在的可执行文件Embedded resource as an syso resourceThis is experimental method that generates .syso file that is compiled by Go compiler. The following command generates the coff syso resource files per directory:rice embed-syso1go build -o rice append --exec 12echo中使用go.rice代码main.go:package mainimport ( 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))}12345678910111213141516171819202122跟main.go同一级新建一个文件夹app放入文件file.txt执行rice embed-go1生成了 rice-box.gopackage mainimport ( 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, 0), 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, 0), Dirs: map[string]*embedded.EmbeddedDir{ : dir1, }, Files: map[string]*embedded.EmbeddedFile{ file.txt: file2, }, })}123456789101112131415161718192021222324252627282930313233343536373839404142执行go build1生成文件embed_resources.exe运行embed_resources.exe删除app文件夹下的file.txt浏览器访问http://localhost:1323/可以看到file.txt文件