Serve embedded files from go-bindata with net/http
.
Install with
$ go get github.com/go-bindata/go-bindata/...
$ go get github.com/elazarl/go-bindata-assetfs/...
Usage is identical to go-bindata usage,
instead of running go-bindata
run go-bindata-assetfs
.
The tool will create a bindata_assetfs.go
file, which contains the embedded data.
A typical use case is
$ go-bindata-assetfs data/...
The generated file provides an assetFS()
function that returns a http.Filesystem
wrapping the embedded files. What you usually want to do is:
http.Handle("/", http.FileServer(assetFS()))
This would run an HTTP server serving the embedded files.
You can always just run the go-bindata
tool, and then
use
import "github.com/elazarl/go-bindata-assetfs"
...
http.Handle("/",
http.FileServer(
&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "data"}))
to serve files embedded from the data
directory.
For single page applications you can use Fallback: "index.html"
in AssetFS context, so if route doesn't match the pattern it will fallback to file specified.
example
import "github.com/elazarl/go-bindata-assetfs"
...
http.Handle("/",
http.FileServer(
&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "data", Fallback: "index.html"}))
To generate binary data from calling the go-bindata-assetfs
cmd when declaring multiple directories, then you can use the AssetDIR(dir string)
function. For example, running the following command inside a directory contaning a dist/..
& public/...
directories:
$ go-bindata-assetfs dist/... public/...
Our server code might look like this using the AssetDIR(dir string)
function
func main() {
r := mux.NewRouter() // Example uses "github.com/gorilla/mux"
// Here we want to serve static content from 2 directories
r.PathPrefix("/dist").Handler(http.StripPrefix("/dist", http.FileServer(AssetDIR("dist"))))
r.PathPrefix("/public").Handler(http.StripPrefix("/public", http.FileServer(AssetDIR("public"))))
// rest of server code...
server := &http.Server{ Addr: ":7777", Handler: r, }
server.ListenAndServe()
}