一.Restful风格请求

  • 在目前所学内容中每个请求都需要绑定一个HandlerFunc,而在实际项目中会有很多URL,且可能出现满足特定规律的URL,例如: /sxt/it和/sxt/baizhan都是以/sxt/开头.且如果这两个URL里面代码也差不多时,写两个Func就属于代码冗余了.
  • 可以使用restful风格把满足特定格式url和功能类似的代码提入到一个func中实现代码复用.

    二.Go语言的多路复用器

  • 在http包中提供了ServeMux实现多路复用器,它会对URL进行解析,然后重定向到正确的处理器上

  • ServeMux是一个结构体,里面存放了map和读写锁

    1. type ServeMux struct {
    2. mu sync.RWMutex
    3. m map[string]muxEntry
    4. hosts bool // whether any patterns contain hostnames
    5. }
  • 在Go语言中有提供了ServeMux的对象DefaultServeMux, ```go var DefaultServeMux = &defaultServeMux

var defaultServeMux ServeMux

  1. - 而平时使用的http.Server不指定Handler属性时默认就是DefaultServeMux
  2. <a name="2d329b07"></a>
  3. # 三.使用第三方实现Restful风格
  4. - 可以使用命令,从github上下载第三方库,下载后放入到%GOROOT%/src/github.com

go get github.com/gorilla/mux

  1. - 使用mux包的Router实现restful风格
  2. ```go
  3. package main
  4. import (
  5. "net/http"
  6. "fmt"
  7. "github.com/gorilla/mux"
  8. )
  9. func hello(w http.ResponseWriter, r *http.Request) {
  10. vars := mux.Vars(r)
  11. fmt.Fprintln(w, "dayinle", vars["key"])
  12. }
  13. func abc(w http.ResponseWriter, r *http.Request) {
  14. fmt.Fprintln(w, "abc")
  15. }
  16. func main() {
  17. r := mux.NewRouter()
  18. r.HandleFunc("/hello/{key}", hello)
  19. r.HandleFunc("/abc", abc)
  20. http.ListenAndServe(":8090", r)
  21. //s:=http.Server{Addr:":8090",Handler:r}
  22. //s.ListenAndServe()
  23. }