惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
月光博客
月光博客
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 司徒正美
美团技术团队
博客园_首页
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News

zodream梦想开源/个人编程日记

文件解析笔记-zodream梦想开源/个人编程日记 密码本开发笔记之读写与保存-zodream梦想开源/个人编程日记 SkiaSharp 把 pixel byte[] 转成 SKBitmap-zodream梦想开源/个人编程日记 nas 使用 Docker 安装 gogs-zodream梦想开源/个人编程日记 复制 android 手机中的文件到电脑-zodream梦想开源/个人编程日记 周报:寻找优质的周刊-zodream梦想开源/个人编程日记 开发日志:对Markdown的代码块新增引用来源支持-zodream梦想开源/个人编程日记 周报:怎么写技术类的教程文章-zodream梦想开源/个人编程日记 css display:flex 布局尺寸超出问题-zodream梦想开源/个人编程日记 周报:SEO优化的思考-zodream梦想开源/个人编程日记 Edge 浏览器不适用 Edge Image Viewer 打开图片 -zodream梦想开源/个人编程日记 SEO 学习笔记(一) 内容来源-zodream梦想开源/个人编程日记 PHP 实现双因素身份认证(2FA)-zodream梦想开源/个人编程日记 WPF MVVM 获取List 多选数据-zodream梦想开源/个人编程日记 Burp Suite 抓包-zodream梦想开源/个人编程日记 使用 indexnow 注意事项-zodream梦想开源/个人编程日记 Godot 使用字体图标 例如: Iconfont、FontAwesome-zodream梦想开源/个人编程日记 angular 15 对指定页面进行访问限制-zodream梦想开源/个人编程日记 CSS 使用 column-count 实现瀑布流出现内容分割的解决办法-zodream梦想开源/个人编程日记 input 确认按键事件在手机端不生效-zodream梦想开源/个人编程日记 C# 使用socket 进行通讯-zodream梦想开源/个人编程日记 Maui开发中Windows应用开启管理员权限-zodream梦想开源/个人编程日记 Maui 中自定义控件-zodream梦想开源/个人编程日记 angular 14 使用 ng-template 实现tree 结构显示-zodream梦想开源/个人编程日记 c# 动态安装和卸载dll-zodream梦想开源/个人编程日记 慎用 CompositionTarget.Rendering-zodream梦想开源/个人编程日记 c# 重写 c++ 程序笔记:数据初始化-zodream梦想开源/个人编程日记 源码编译 aseprite-zodream梦想开源/个人编程日记 记录一下字符串分隔split各语言之间的不同-zodream梦想开源/个人编程日记 c# Gzip解码无头内容-zodream梦想开源/个人编程日记
gin 使用笔记(一)基础-zodream梦想开源/个人编程日记
zodream · 2021-04-18 · via zodream梦想开源/个人编程日记

关于路由

路由 ` 和/` 可以分开作为两个路由, 但是如果只有一个,就会把没注册的那个重定向到注册的那个

r := gin.Default()
r.GET("/home", Index)
r.GET("/home/", Abount)

123

这种方法时有效的

如果只注册一个

r := gin.Default()
r.GET("/home", Index)

12

浏览器访问 http://localhost/home/ 就会响应 301 并跳转到 http://localhost/home

路由分组

可以通过 ` ` 进行更精确的分组

r := gin.Default()
blog := r.Group("/blog")
blog.GET("", Index)
g := blog.Group("")
g.Use(middleware.CORS)
g.GET("/count", Count)

123456

中间件

gin.HandlerFunc 只能通过 c.Abort 进行中断,否则会继续执行下去

r := gin.Default()
r.Use(func(c *gin.Context) {
    if false {
        c.AbortWithStatusJSON(400, json.RenderFailure(err.Error()))
        return
    }
})

1234567

c.Next() 不是必须调用,如果需要对输出结果进行操作,这是才需要在内部调用

在中间件中传值

c.Keys["key"] = val

路由方法

c.ShouldBindQuery 可以绑定查询值到模型

c.Get() c.GetInt() c.GetString() 等是获取 c.Keys 注册的值

c.Query 获取查询的值

c.ShouldBind 是绑定post 提交的值到模型

c.PostForm 获取post的值

获取网址中匹配的值

r.GET("/user/:id", func(c *gin.Context) {
    // a GET request to /user/john
    id := c.Param("id") // id == "john"
})

1234

模板

r := gin.Default()
r.Static("/assets", configs.Config.Asset) // 指定资源文件的路径及文件夹
r.StaticFile("/favicon.ico", configs.Config.Favicon) // 指定网站图标
r.LoadHTMLGlob("templates/**/*")

1234

特别注意:

templates/**/* 会匹配 templates 文件夹下的子文件夹中的文件,但是只会注册文件名

例如

templates/blog/index.htmltemplates/auth/index.html

func Index(ctx *gin.Context) {
    ctx.HTML(200, "index.html", gin.H{})
}

123

ctx.HTML(200, "blog/index.html", gin.H{}) 这样是访问不到的,

ctx.HTML(200, "index.html", gin.H{}) 这样才能访问到,但是访问的是 templates/blog/index.html

如果要两个文件都生效,只能改文件名 templates/auth/auth_index.html

ctx.HTML(200, "auth_index.html", gin.H{})

转载请保留原文链接: https://zodream.cn/blog/id/203.html