这是我参与「第三届青训营 -后端场」笔记创作活动的的第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)
}
运行结果为
这样我们就可以对请求进行操作了
由于request对象里的属性非常丰富,所以我们还可以有很多的操作
😎😎😎又是我,我还是小小分割线
都用心看到这里了,那就求个赞吧😘
🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好