这个问题是我早期问题的后续问题。我已经结束了这个问题,所以我希望我能在这里提出一个新的但相关的问题。 Go: embed static files in binary
如何使用go-bindata提供JS文件?我将它传递给像这样的HTML
hi.html
<script>{{.Bindata}}></script>
即使我没有编译或JS错误,似乎也无法正常工作。
答案 0 :(得分:2)
使用https://github.com/elazarl/go-bindata-assetfs
假设您有以下结构:
myprojectdirectory
├───api
├───cmd
├───datastores
└───ui
├───css
└───js
ui
是您要整理并打包到您的应用中的目录结构......
go-bindata-assetfs工具非常简单。它将查看您传递给它的目录,并生成一个源文件,其中的变量可以包含这些文件中的二进制数据。因此,请确保您的静态文件存在,然后从myprojectdirectory
运行以下命令:
go-bindata-assetfs ./ui/...
现在,默认情况下,这将在包main
中创建一个源文件。有时,这没关系。就我而言,它不是。如果您愿意,可以生成具有不同包名称的文件:
go-bindata-assetfs.exe -pkg cmd ./ui/...
在这种情况下,生成的文件bindata_assetfs.go
在 myprojectdirectory 目录中创建(不正确)。就我而言,我只是手动将文件移动到 cmd 目录。
在我的应用中,我已经有了一些代码从目录中提供文件:
import (
"net/http"
"github.com/gorilla/mux"
)
// Create a router and setup routes
var Router = mux.NewRouter()
Router.PathPrefix("/ui").Handler(http.StripPrefix("/ui", http.FileServer(http.Dir("./ui"))))
// Start listening
http.ListenAndServe("127.0.0.1:3000", Router)
首先确保此类内容正常运行。然后,将FileServer行更改为:
是微不足道的Router.PathPrefix("/ui").Handler(http.StripPrefix("/ui", http.FileServer(assetFS())))
现在您有一个生成的源文件,其中包含您的静态资源。您现在可以安全地删除&#39; ui&#39;子目录结构。用
编译 go install ./...
你应该有一个能够正确提供静态资产的二进制文件。
答案 1 :(得分:0)
使用https://github.com/elazarl/go-bindata-assetfs
自述文件:
go-bindata-assetfs data/...
在代码设置中,使用文件服务器
http.Handle("/", http.FileServer(assetFS()))
答案 2 :(得分:0)
我在这里得到答案:Unescape css input in HTML
var safeCss = template.CSS(`body {background-image: url("paper.gif");}`)