The challenge, from Tour of Go, "Exercise: HTTP Handlers":
Implement the following types and define ServeHTTP methods on them. Register them to handle specific paths in your web server.
type String string
type Struct struct {
Greeting string
Punct string
Who string
}
For example, you should be able to register handlers using:
http.Handle("/string", String("I'm a frayed knot."))
http.Handle("/struct", &Struct{"Hello", ":", "Gophers!"})
Solution:
package main
import (
"log"
"net/http"
"fmt"
)
type String string
type Struct struct {
Greeting string
Punct string
Who string
}
func (s String) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if _, err := fmt.Fprint(w, s); err != nil {
log.Fatal("Error in ServerHTTP of String.")
}
}
func (s *Struct) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if _, err := fmt.Fprint(w, s.Greeting, s.Punct, s.Who); err != nil {
log.Fatal("Error in ServerHTTP of String.")
}
}
func main() {
http.Handle("/string", String("I'm a frayed knot."))
http.Handle("/struct", &Struct{"Hello", ":", "Gophers!"})
log.Fatal(http.ListenAndServe("localhost:4000", nil))
}
Any suggestions on how to improve this code?