golang 每日一练 net/http 搭建一个简易的http服务器

      net.http包是官方为搭建http服务器做准备,可以简单的对web路由,cookie,header头进行设置,你可以对他进行包装来实现合适你的web框架


1.首先绑定一个路由路径

mux := http.NewServeMux()
mux.HandleFunc("/test", func(w http.ResponseWriter,req *http.Request) {

})


2.定义一个 Server 类型

s := &http.Server{
//绑定 8088端口
      Addr: ":8088",
      //设置刚刚的 路由handler
      Handler: mux,
      // 请求的读取操作在超时前的最大持续时间
      ReadTimeout: 10 * time.Second,
      // 回复的写入操作在超时前的最大持续时间
      WriteTimeout: 10 * time.Second,
      // 请求的头域最大长度,如为0则用DefaultMaxHeaderBytes
      MaxHeaderBytes: 1 << 20,
}
//监听并且启动服务
err := s.ListenAndServe()

if err != nil {
fmt.Println(err)
}


当然我们也可以快速去实现

http.HandleFunc("/test", func(w http.ResponseWriter, req *http.Request) {

})

err := http.ListenAndServe(":8088",nil)
if err != nil {
fmt.Println(err)
}


实现一个客户端

func main()  {
resp,err := http.Get("http://localhost:8088/test1?a=1&b=2")
if err != nil {
fmt.Println(err)
}
//程序在使用完回复后必须关闭回复的主体。
      defer resp.Body.Close()
//获取服务端返回的全部内容
      body,err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}




还有其他类型

type ResponseWriter

type Request


在handleFunc中设置

http.HandleFunc("/test", func(w http.ResponseWriter, req *http.Request) {
//显式调用主要用于发送错误码
      w.WriteHeader(http.StatusOK)
//服务端设置header头
      w.Header().Set("Content-type","text/plain")
//向连接中写入作为HTTP的一部分回复的数据
      w.Write([]byte("hello world!\n"))
//得到客户端请求的HTTP 方法
      w.Write([]byte("request Method:"+req.Method+"\n"))
//Host头的值,或者URL自身提供的主机名。 Host的格式可以是"host:port"
      w.Write([]byte("request Host:"+req.Host+"\n"))
//请求的User-Agent头
      w.Write([]byte("UserAgent:"+req.UserAgent()+"\n"))
//请求的Referer头
      w.Write([]byte("Referer:"+req.Referer()+"\n"))
//FormValue返回key为键查询r.Form字段得到结果[]string切片的第一个值
      w.Write([]byte(req.FormValue("a")+"\n"))
//ParseForm解析URL中的查询字符串,并将解析结果更新到r.Form字段。
      req.ParseForm()
for k,v := range req.Form {
io.WriteString(w,fmt.Sprintf("参数%s的值为%s\n",k,strings.Join(v,",")))
}


这样简单的http服务器和一个get请求就实现了

在线交流