[go学习笔记]四十三、HTTP服务

266 阅读1分钟

示例代码请访问:github.com/wenjianzhan…

示例代码

func main() {
	http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
		fmt.Fprintf(writer, "Hello World!")
	})

	http.HandleFunc("/time", func(writer http.ResponseWriter, request *http.Request) {
		t := time.Now()
		timerStr := fmt.Sprintf("{\"time\":\"%s\"}", t)
		writer.Write([]byte(timerStr))
	})

	http.ListenAndServe(":8090", nil)
}

DefaultRouter

func (sh serverHandler) ServerHTTO(rw ResponseWriter, req *Request) {
  if handler == nil {
    handler = DefaultServeMux //使用缺省的Router
  }
  if req.RequestRUI == "*" && req.Method == "OPTIONS" {
    handler = globalOptionsHandler{}
  }
  handler.ServeHTTP(rw, req)
}

路由规则

  • URL 分为两种,末尾是/:表示一个子树,后面可以跟其他子路径;末尾不是/,表示一个叶子,固定的路径

以/结尾的url可以匹配他的任何子路径,比如 /images 会匹配 /images/cute-cat.jpg

  • 它采用最长匹配原则,如果有多个匹配,一定采用匹配路径最长的那个进行处理
  • 如果没有找到任何匹配项,会返回 404 错误

示例代码请访问:github.com/wenjianzhan…