【GoWeb框架初探————Gin篇】

1. Gin

1.1 下载相应依赖

创建go项目,在项目下建立go.mod文件(若有则跳过)
命令行运行

go get github.com/gin-gonic/gin

1.2 启动一个简单Web服务

package mainimport ("github.com/gin-gonic/gin""github.com/thinkerou/favicon""net/http"
)func main() {// 获取一个gin默认的服务器ginServer := gin.Default()// 修改网站在浏览器的iconginServer.Use(favicon.New("./icon/img.png"))// 访问地址,处理我们的请求		Request   ResponseginServer.GET("/hello", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"msg": "hello,world"})})// 返回界面// 服务端口ginServer.Run(":8083")
}

1.3 Gin中的Restful风格API

	// Gin RestFul风格ginServer.GET("/user", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"msg": "GET,user"})})ginServer.POST("/user", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"msg": "POST,user"})})ginServer.PUT("/user", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"msg": "PUT,user"})})ginServer.DELETE("/user", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"msg": "DELETE,user"})})

1.4 如何返回网页

func main() {// 创建一个服务ginServer := gin.Default()// 修改网站在浏览器的iconginServer.Use(favicon.New("./icon/img.png"))// 加载静态页面ginServer.LoadHTMLGlob("templates/*")// 加载资源文件ginServer.Static("/static", "./static")// 响应一个页面给前端ginServer.GET("index", func(context *gin.Context) {context.HTML(http.StatusOK, "index.html", gin.H{"msg": "这是后台来的数据"})})// 服务端口ginServer.Run(":8083")
}

前端html界面使用参数的方法类似于vue中的操作

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>我的一个Go Web界面</title><link rel="stylesheet" href="/static/css/style.css"><script src="/static/js/common.js"></script>
</head>
<body>
太强啦!
获取后端数据为:{{.msg}}
</body>
</html>

在这里插入图片描述

1.5 如何从请求中获取参数

	// url?userid=xxx&username=kuangshenginServer.GET("/user/info", func(context *gin.Context) {userid := context.Query("userid")username := context.Query("username")context.JSON(http.StatusOK, gin.H{"userid":   userid,"username": username,})})// /user/info/1/kuangshenginServer.GET("user/info/:userid/:username", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"userid":   context.Param("userid"),"username": context.Param("username"),})})// 前端给后端传递jsonginServer.POST("/json", func(context *gin.Context) {body, _ := context.GetRawData()var m map[string]interface{}// 序列化包装为json_ = json.Unmarshal(body, &m)context.JSON(http.StatusOK, m)})// 处理表单的数据ginServer.POST("/user/add", func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"userid":   context.PostForm("userid"),"username": context.PostForm("username"),})})

1.6 路由和重定向

	// 重定向ginServer.GET("/test", func(context *gin.Context) {// 重定向context.Redirect(http.StatusMovedPermanently, "https://baidu.com")})// 404 NoRouteginServer.NoRoute(func(context *gin.Context) {context.HTML(http.StatusNotFound, "404.index", nil)})// 路由组userGroup := ginServer.Group("/user"){userGroup.GET("/add")userGroup.POST("/login")userGroup.POST("/logout")}v1api := ginServer.Group("/v1")v1api.GET("/jack", func(context *gin.Context) {context.String(http.StatusOK, "版本v1的jack")})

1.7 中间件/拦截器

预处理、登录授权、验证、分页…耗时统计
我们查看GET等请求的参数时,发现第二个参数是…HandlerFunc,表示这是一个可变长的参数,会依次进过这些处理器进行处理。

// 自定义Go中间件
func myHandler() gin.HandlerFunc {return func(context *gin.Context) {// 通过自定义的中间值,设置的值,在后续处理只要调用了这个中间件的都可以拿到这里的参数context.Set("usersSession", "userId-1")context.Next()  //放行context.Abort() //阻止}
}//func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
//也就是说,我们可以通过这样的方式来让请求依次通过多个handler
ginServer.POST("/user/add",myHandler() ,func(context *gin.Context) {context.JSON(http.StatusOK, gin.H{"userid":   context.PostForm("userid"),"username": context.PostForm("username"),"usersSession": context.MustGet("usersSession").(string)})
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/631089.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA使用SCALA

一、在IDEA中下载插件 在设置->插件中找到scala&#xff0c;并下载。 下载完成后重启idea 二、在idea中创建spark的RDD操作项目 新建项目选中Scala。 创建完成后为项目添加java包&#xff0c;这个添加的是spark安装包中jars目录下的所有jar包 然后编写RDD操作 import or…

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展&#xff0c;车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频&#xff0c;如何高效地剪辑、整理并分享这些精彩瞬间&#xff0c;一直是车主和汽车内容创作者们所面临的难题。美摄科技&#xff0c;作为领先的视频智…

JavaWeb--04YApi,Vue-cli脚手架Node.js环境搭建,创建第一个Vue项目

04 1 Yapi2 Vue-cli脚手架Node.js环境搭建配置npm的全局安装路径 3 创建项目&#xff08;这个看下一篇文章吧&#xff09; 1 Yapi 前后端分离中的重要枢纽"接口文档",以下一款为Yapi的接口文档 介绍&#xff1a;YApi 是高效、易用、功能强大的 api 管理平台&#…

【行为型模式】模板方法模式

一、模板方法模式概述 模板方法模式定义&#xff1a;在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(类对象型模式) 模板方法中的基本方法是实现算法的各个步骤&#xff0c;是模板方法的…

展览展会媒体媒体邀约执行应该怎么做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 展览展会邀请媒体跟其他活动邀请媒体流程大致相同&#xff0c;包括 制定媒体邀约计划&#xff0c;准备新闻稿&#xff0c;发送邀请函&#xff0c;确认媒体参会&#xff0c;现场媒体接待及…

Linux的图形资源及指令

一、火车 1.切换到超级用户 su 2.下载资源 yum install -y sl 3.输入指令 sl&#xff0c;得到火车图形 如果没有得到该图形&#xff0c;就将2处改为yum install -y epel-release。 二、Linux的logo 1.在超级用户模式下下载资源 yum install -y linux_logo 2.输…

算法练习第20天|回溯算法 77.组合问题 257. 二叉树的所有路径

1.什么是回溯算法&#xff1f; 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。其本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案。 2.为什么要有回溯算法? 那么既然回溯法并不高效为什么还要用它呢&#xff1f; 因为有的问题能暴力…

如何获得合适的助听器?

要获得一个合适的助听器&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 咨询专业医生或听力专家&#xff1a;首先&#xff0c;建议您咨询专业的耳鼻喉科医生或听力专家。他们可以通过听力测试来评估您的听力损失程度和类型&#xff0c;并为您提供个性化的建议。 2. 选择信…

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图&#xff08;Use Case Diagram&#xff09;。2.展现了一组用例、参与者&#xff08;Actor&#xff09;以及它们之间的关系。3.用例图通常包括以下的内容&#xff1a;用例、参与者、用…

LabVIEW供热管道泄漏监测与定位

LabVIEW供热管道泄漏监测与定位 在现代城市的基础设施建设中&#xff0c;供热管道系统起着极其重要的作用。然而&#xff0c;管道泄漏问题不仅导致巨大的经济损失&#xff0c;还对公共安全构成威胁。因此&#xff0c;开发一种高效、准确的管道泄漏监测与定位技术显得尤为关键。…

基于Bootstrap 4的企业项目体验服务网站模板

目录 一.前言 二.展示 三.下载链接 一.前言 网页包含以下内容&#xff1a; 页面基本信息&#xff1a;设置页面的字符集、兼容性、视口等元数据。 网站标题和描述&#xff1a;定义了网站的标题为"Benten"&#xff0c;同时也设置了关键词和描述。 CSS样式表链接&a…

「GO基础」在Windows上配置VS Code GO语言开发环境

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…