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  }