igozhang

——

    go_http

    go 1.17
    
    http
    easyjson  #github上的一个rest_decode项目
    http_router
    restful01
    
    go_http
    
    package main
    
    import (
    	"fmt"
    	"net/http"
    
    	"time"
    )
    
    func main() {
    	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    		fmt.Fprintf(w, "Hello World!")
    	})
    	http.HandleFunc("/time/", func(w http.ResponseWriter, r *http.Request) {
    		t := time.Now()
    		timeStr := fmt.Sprintf("{\"time\": \"%s\"}", t)
    		w.Write([]byte(timeStr))
    	})
    
    	http.ListenAndServe(":8080", nil)
    }
    
    简要:
    http.ListenAndServe 函数负责监听8080端口,建立连接
    http.HandleFunc  处理请求,它拥有w,r两个参数,w负责客户端应答,r负责接收客户端请求
    
    http_router
    https://github.com/joshbuddy/http_router
    go get -u  github.com/julienschmidt/httprouter
    
    package main
    
    import (
    	"fmt"
    	"log"
    	"net/http"
    
    	"github.com/julienschmidt/httprouter"
    )
    
    func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    	fmt.Fprint(w, "Welcome!\n")
    }
    
    func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    	fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))
    }
    
    func main() {
    	router := httprouter.New()
    	router.GET("/", Index)
    	router.GET("/hello/:name", Hello)
    
    	log.Fatal(http.ListenAndServe(":8080", router))
    }
    
    go_restful
    
    https://github.com/joshbuddy/http_router
    go get -u  github.com/julienschmidt/httprouter
    
    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    
    	"github.com/julienschmidt/httprouter"
    )
    
    type Employee struct {
    	ID   string `json:"id"`
    	Name string `json:"name"`
    	Age  int    `json:"age"`
    }
    
    var employeeDB map[string]*Employee
    
    func init() {
    	employeeDB = map[string]*Employee{}
    	employeeDB["Mike"] = &Employee{"e-1", "Mike", 35}
    	employeeDB["Rose"] = &Employee{"e-2", "Rose", 45}
            employeeDB["Igo"] = &Employee{"e-3", "Igo", 25}
    }
    
    func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    	fmt.Fprint(w, "Welcome!\n")
    }
    
    func GetEmployeeByName(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    	qName := ps.ByName("name")
    	var (
    		ok       bool
    		info     *Employee
    		infoJson []byte
    		err      error
    	)
    	if info, ok = employeeDB[qName]; !ok {
    		w.Write([]byte("{\"error\":\"Not Found\"}"))
    		return
    	}
    	if infoJson, err = json.Marshal(info); err != nil {
    		w.Write([]byte(fmt.Sprintf("{\"error\":,\"%s\"}", err)))
    		return
    	}
    
    	w.Write(infoJson)
    }
    
    func main() {
    	router := httprouter.New()
    	router.GET("/", Index)
    	router.GET("/employee/:name", GetEmployeeByName)
    
    	log.Fatal(http.ListenAndServe(":8080", router))
    }
    

    MP3