github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/main/chapter/ch8_02_http/resource_oriented_arc.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "log" 7 "net/http" 8 9 "github.com/julienschmidt/httprouter" 10 ) 11 12 type Employee struct { 13 ID string `01_json:"id"` 14 Name string `01_json:"name"` 15 Age int `01_json:"age"` 16 } 17 18 var employeeDB map[string]*Employee 19 20 func init() { 21 employeeDB = map[string]*Employee{} 22 employeeDB["Mike"] = &Employee{"e-1", "Mike", 35} 23 employeeDB["Rose"] = &Employee{"e-2", "Rose", 45} 24 } 25 26 func GetEmployeeByName(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { 27 qName := ps.ByName("name") 28 var ( 29 ok bool 30 info *Employee 31 infoJson []byte 32 err error 33 ) 34 if info, ok = employeeDB[qName]; !ok { 35 w.Write([]byte("{\"error\":\"Not Found\"}")) 36 return 37 } 38 if infoJson, err = json.Marshal(info); err != nil { 39 w.Write([]byte(fmt.Sprintf("{\"error\":,\"%s\"}", err))) 40 return 41 } 42 43 w.Write(infoJson) 44 } 45 46 func main() { 47 router := httprouter.New() 48 router.GET("/", Index) 49 router.GET("/employee/:name", GetEmployeeByName) 50 51 log.Fatal(http.ListenAndServe(":8080", router)) 52 }