The example below uses gorilla/mux package
package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func YourHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Gorilla!\n")
}
func UnauthorizedHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(401)
fmt.Fprintf(w, "401 Unauthorized\n")
}
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(404)
fmt.Fprintf(w, "404 Not Found\n")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", YourHandler)
d := "/static/"
r.HandleFunc(d, UnauthorizedHandler) // prevent directory listing
r.HandleFunc(d+"{filename:[a-zA-Z0-9]+}.gif", NotFoundHandler) // black list file type
r.PathPrefix(d).Handler(http.StripPrefix(d, http.FileServer(http.Dir("."+d))))
log.Fatal(http.ListenAndServe(":8000", r))
}
Save the codes above into a file, lets call it “fileserver.go”. In the same location create a directory named “static”. Run it by
go run fileserver.go
Place some jpg, gif or txt files into “static” folder. Lets say you placed a file named “helloworld.txt”. To browse it
http://localhost:8000/static/helloworld.txt