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请求就实现了