Golang怎么处理请求呢 | 青训营笔记

157 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第9篇笔记

😆在这里,我对今天所新学到的Golang服务器请求处理做了一次总结

😜Golang的其他知识在哪里找呢,那你就问对了

👨‍💻Golang基础复习 - 掘金 (juejin.cn) 在这里我总结了一些这篇文章没有提到的一些知识

😊如果有小伙伴能想到更多知识,欢迎大家在评论区留言,那么我们就开始吧

👩‍💻👨‍💻哟西,一个棕~

😎😎😎我是小小分割线

介绍

在Golang中提供了一系列用于表示HTTP的结构

我们可以使用它处理请求和发送响应

其中request结构代表客户端发送过来的请求报文

那我们该如何根据request拿到我们需要的信息呢

我们来看看Golang中的

Request结构体

type Request struct {

   // 请求使用的方法
   Method string
   
   // 资源的URL
   // URL中又有很多的信息
   URL *url.URL
   
   // 协议版本
   Proto      string // "HTTP/1.0"
   ProtoMajor int    // 1
   ProtoMinor int    // 0
   
   // 请求头部信息
   Header Header
   
   // 请求体
   Body io.ReadCloser
   
   // GetBody 定义了一个可选的函数来返回一个新的 Body 副本。
   GetBody func() (io.ReadCloser, error)
   
   // 相关内容的长度
   ContentLength int64
   
   // 传输编码
   TransferEncoding []string
   
   // 是否在回复请求后关闭
   Close bool
   
   // 主机Host信息
   Host string
   
   // 解析好的表单数据
   Form url.Values
   
   // 解析好的POST和PUT的表单信息
   PostForm url.Values
   
   // 解析好的多部件表单
   MultipartForm *multipart.Form
   
   // 指定会在请求主体之后发送的额外的头域 
   Trailer Header
   
   // 远程地址信息
   RemoteAddr string
   
   // 请求资源信息
   RequestURI string
  
   // TLS 允许 HTTP 服务器和其他软件记录有关接收请求的 TLS 连接的信息
   TLS *tls.ConnectionState
   
   // Cancel 是一个可选通道
   // 其关闭表示客户端请求应被视为已取消
   Cancel <-chan struct{}
   
   // 响应
   Response *Response
   
   // 上下文
   ctx context.Context
}

可以看到我们可以拿到这么多的信息

我们可以对这个request对象进行操作

那我们该这么获得这个对象呢?

我们在上一次的笔记中可以看到

我们的handler的实现的方法中有两个形参

一个是writer还有一个就是request

那我们就来对这个request操作一下吧

我们在之前的自定义请求时我们知道了

在URL这个对象中我们可以存放很多东西

那同样,我们也可以拿出来很多东西

// 建一个实现类
type myHandler struct {
}

// 实现Handler
func (m *myHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
   // 从request中拿出URL进行操作
   url := request.URL

   // 拿到信息
   query := url.RawQuery

   // 将拿到的信息写入writer,打印到网页
   fmt.Fprint(writer, "我们拿到了 ==> "+query)
}

func main() {

   // 实例化一个实现类
   myHandler := new(myHandler)

   http.Handle("/hello", myHandler)

   // 地址为8080端口
   // handler为nil,使用默认的handler
   http.ListenAndServe(":8080", nil)
}

运行结果为

image.png

这样我们就可以对请求进行操作了

由于request对象里的属性非常丰富,所以我们还可以有很多的操作

😎😎😎又是我,我还是小小分割线

都用心看到这里了,那就求个赞吧😘

🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好