func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path[1:] log.PrintLn(path) data, err := ioutil.ReadFile(string(path)) if err == nil { var contentType string if strings.HasSuffix(path, ".css") { contentType = "text/css" } else if strings.HasSuffix(path, ".html") { contentType = "text/html" } else if strings.HasSuffix(path, ".js") { contentType = "application/javascript" } else if strings.HasSuffix(path, ".png") { contentType = "image/png" } else if strings.HasSuffix(path, ".svg") { contentType = "image/svg+xml" } else { contentType = "text/plain" } w.Header().Add("Content Type", contentType) w.Write(data) } else { w.WriteHeader(404) w.Write([]byte("Sorry, 404 - " + http.StatusText(404))) } }
// attach to the struct a the ServeHTTP method, which turns MyHandler into an http handler to write responses given a request // the http request is named: "r", sometimes it is conventionally named: "req" // the http response is named "w", which you write data to, which you then send to the client as the body of the response func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // http.Request has built in data for a URL_PATH path := r.URL.Path[1:] // logs the url path to the terminal log.PrintLn(path) data, err := ioutil.ReadFile(string(path)) if err == nil { // write the response body w.Write(data) } else { // write the response header w.Writeheader(404) // write the response body w.Write([]byte("404 HTTP Error - " + http.StatusText(404))) } }