GO Web 冲冲冲,Gin 冲冲冲
学习资料:https://www.liwenzhou.com/posts/Go/go_menu/
net/http
默认服务器实例
server
1 | package main |
hello.txt
1 | <h1 style='color:red'>Hello Golang!</h1> |
Gin
先换个国内镜像,不然go get容易挂,而且以后build之前就需要go mod init了
1 | go env -w GO111MODULE=on |
test
1 | package main |
用postman
测试
RESTful API
简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。
GET
用来获取资源POST
用来新建资源PUT
用来更新资源DELETE
用来删除资源
HTML渲染
前后端分离用JS的话,用这种渲染方法比较少了,也看一下
basic
server
1 | package main |
template
1 | <!DOCTYPE html> |
middle
server
1 | package main |
template
1 | <!DOCTYPE html> |
advanced
server
1 | package main |
template
1 | <!DOCTYPE html> |
1 | <ul> |
top
block
是定义模板,典型的用法是定义一组根模板,然后通过在其中重新定义块模板进行自定义
利用这个特性,可以实现模板的继承
server
1 | package main |
template
basic.tmpl
1 |
|
index.tmpl
1 | <!-- 继承根模板 --> |
home.tmpl
1 | <!-- 继承根模板 --> |
修改默认的标识符_标签转移转义
server
1 | package main |
template
index.tmpl
1 |
|
xss.tmpl
1 |
|
gin_template
基础的templates和静态文件渲染
就放个server吧
1 | package main |
gin_json
json的两种传参方式
1 | package main |
query_string(Get请求较多)
介绍一下几种常见的query string的传参方式
querystring
指的是URL中?
后面携带的参数
1 | package main |
获取form参数(Post请求较多)
请求的数据通过form表单来提交,例如向/user/search
发送一个POST请求
server
1 | package main |
获取path参数(url路径参数)
请求的参数通过URL路径传递,例如:/user/search/xiaoyuyu
有时候我们需要获取他的url路径
1 | package main |
参数绑定
为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type
识别请求数据类型并利用反射机制自动提取请求中QueryString
、form表单
、JSON
、XML
等参数到结构体中
也就是说我们不必为不同的类型准备不同的方法或这结构体,可以一把梭了
额外说一句,postman真的香
1 | package main |
单个文件上传
1 | package main |
重定向
1 | package main |
路由
原先一定要一个个方法添加,可以尝试一下Any,Group,NoRoute这些方法偷个懒
Any,是对一个路由的多个方法的汇总
Group,是对许多个前缀相同的路由进行的方法汇总;同时,路由组也是支持嵌套的
1 | package main |
中间件
很重要的内容,极其重要
1 | package main |
路由组
1 | shopGroup := r.Group("/shop", StatCost()) |
中间件注意事项
gin默认中间件
gin.Default()
默认使用了Logger
和Recovery
中间件,其中:
Logger
中间件将日志写入gin.DefaultWriter
,即使配置了GIN_MODE=release
。Recovery
中间件会recover任何panic
。如果有panic的话,会写入500响应码。
如果不想使用上面两个默认的中间件,可以使用gin.New()
新建一个没有任何默认中间件的路由。
gin中间件中使用goroutine
当在中间件或handler
中启动新的goroutine
时,不能使用原始的上下文(c *gin.Context),必须使用其只读副本(c.Copy()
)
运行多个服务
例子来源于中文文档,解析一下
1 | package main |
本文链接: http://woaixiaoyuyu.github.io/2020/03/03/GO-Web/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!