Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Resource compiler for Go
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
nrsc
test-resources
.hgignore
.hgtags
.travis.yml
AUTHORS
ChangeLog
LICENSE.txt
README.md
doc.go
nrsc.go
nrsc_test.go
push-to-github.sh

README.md

nrsc - Resource Compiler for Go

nrsc a directory of resource into a Go source file so you can still deploy a single executable as a web server with all the CSS, image files, JS ... included.

Installing

go get bitbucket.org/tebeka/nrsc
go get bitbucket.org/tebeka/nrsc/nrsc

(The 2'nd command will grab the nrsc executable)

And you'll need zip somewhere in your path.

Invocation

go build
nrsc <executable> <resource dir> [zip options]

API

The nrsc package has the following interface

nrsc.Handle(prefix string)

This will register with the net/http module to handle all paths starting with prefix.

When a request is handled, prefix is stripped and then a resource is located and served.

Resource that are not found will cause an HTTP 404 response.

nrsc.Get(path string) Resource

Will return a resource interface (or nil if not found) (see resource interface below).

This allows you more control on how to serve.

LoadTemplates(t template.Template, filenames ...string) (template.Template, error)

Will load named templates from resources. If the argument "t" is nil, it is created from the first resource.

Resource Interface

func Open() (io.Reader, error)

Returns a reader to resource data

func Size() int64

Returns resource size (to be used with Content-Length HTTP header).

func ModTime() time.Time

Returns modification time (to be used with Last-Modified HTTP header).

Example Code

package main

import (
        "fmt"
        "net/http"
        "os"

        "bitbucket.org/tebeka/nrsc"
)

func indexHandler(w http.ResponseWriter, req *http.Request) {
        fmt.Fprintf(w, "Hello World\n")
}

func main() {
        nrsc.Handle("/static/")
        http.HandleFunc("/", indexHandler)
        if err := http.ListenAndServe(":8080", nil); err != nil {
                fmt.Fprintf(os.Stderr, "error: %s\n", err)
                os.Exit(1)
        }
}

Contact

https://bitbucket.org/tebeka/nrsc

License

MIT (see LICENSE.txt)

Something went wrong with that request. Please try again.