Miki Tebeka avatar Miki Tebeka committed d758d1b

Start sketch

Comments (0)

Files changed (2)

+package main
+
+import (
+	"fmt"
+	"net/http"
+
+	"./resources"
+)
+
+func indexHandler(w http.ResponseWriter, req *http.Request) {
+	fmt.Fprintf(w, "Hello World\n")
+}
+
+func main() {
+	resources.Handle("/static/")
+	http.HandleFunc("/", indexHandler)
+	http.ListenAndServe(":8080", nil)
+}

resources/resources.go

+package resources
+
+import (
+	"bytes"
+	"fmt"
+	"io"
+	"net/http"
+)
+
+type Resource interface {
+	Open() io.Reader
+	Size() int
+	Type() string
+}
+
+var resources map[string]Resource
+
+type resource struct {
+	data  []byte
+	ctype string
+}
+
+func (rsc *resource) Open() io.Reader {
+	return bytes.NewReader(rsc.data)
+}
+
+func (rsc *resource) Size() int {
+	return len(rsc.data)
+}
+
+func (rsc *resource) Type() string {
+	return rsc.ctype
+}
+
+type handler int
+
+func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	rsc := resources[req.URL.Path]
+	if rsc == nil {
+		http.NotFound(w, req)
+		return
+	}
+
+	header := w.Header()
+	header.Set("Content-Type", rsc.Type())
+	header.Set("Content-Size", fmt.Sprintf("%d", rsc.Size()))
+	io.Copy(w, rsc.Open())
+}
+
+func Get(path string) Resource {
+	return resources[path]
+}
+
+func Handle(prefix string) {
+	var h handler
+	http.Handle(prefix, http.StripPrefix(prefix, h))
+}
+
+func init() {
+	resources = make(map[string]Resource)
+	resources["hello"] = &resource{[]byte("hello there"), "text/plain"}
+}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.