|
|
- package main
-
- import (
- "errors"
- "fmt"
- "log"
- "net/http"
- "regexp"
- )
-
- func main() {
- http.HandleFunc("/hello", helloHTTP)
- http.HandleFunc("/user/", userProfile)
- http.HandleFunc("/", notFound)
- log.Fatal(http.ListenAndServe(":8080", nil))
- }
-
- func helloHTTP(w http.ResponseWriter, req *http.Request) {
- fmt.Fprint(w, "Hello HTTP")
- }
-
- func notFound(w http.ResponseWriter, req *http.Request) {
- http.NotFound(w, req)
- }
-
- func userProfile(w http.ResponseWriter, req *http.Request) {
- userID, err := getID(w, req)
- if err != nil {
- return
- }
- fmt.Fprintf(w, "User Profile: %q", userID)
- }
-
- var validPath = regexp.MustCompile("^/(user)/([0-9]+)$")
-
- func getID(w http.ResponseWriter, req *http.Request) (string, error) {
- m := validPath.FindStringSubmatch(req.URL.Path)
- if m == nil {
- http.NotFound(w, req)
- return "", errors.New("Invalid ID")
- }
- return m[2], nil // The ID is the second subexpression.
- }
|