Go的Http链路源码分析

HelloWorld
package main
import (
  "net/http"
  "fmt"
)

func main() {
  http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintf(writer, "Hello World.\n")
  })
  http.ListenAndServe(":9090", nil)
}

运行 & localhost:9090 浏览器将输出 Hello World 可以看到Go写一个Web Server非常简单

  • Http请求的流程图如下

Go-http

  • Http的源码逻辑流程如下

Go-http-detail

  • 下面将从源码的角度分析go的http请求整个链路的完整过程

有一个表单姓名username, 获取方式 request.Form["username"],若在url后加 xxx&username=xxx,则依然能获取到url上的数据,key唯一的情况下,获取数据需 先判断是那种http的method,比如表单是POST,然后再进行获取数据,否则可能出现脏数据情况