快速上手GoWeb开发之Gin框架

news2024/12/28 8:17:46

Go是一门正在快速增长的编程语言,专为构建简单、快速且可靠的软件而设计。 golang提供的net/htp库已经很好了,对于htp的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。

Gin: Go 语言编写的 Web 框架,以更好的性能实现类似 Martini 框架的 API.

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确。具有快速灵活,容错方便等特点。Beego: 开源的高性能 Go 语言 Web 框架

beego是一个快速开发Go应用的htp框架。

go 语言方面技术大牛beego可以用来快速开发AP1、Web、后端服务等各种应用,是一个RESTFUul的框架,主要设计灵感来源于tornado、sinatra flask这三个框架,但是结合了Go本身的一些特性(interfae、strut继承等)而设计的一个框架。

Iris: 全宇宙最快的 Go 语言 Web 框架。完备 MVC 支持,未来尽在掌握。

lris是一个快速,简单但功能齐全的和非常有效的web框架。提供了一个优美的表现力和容易使用你的下一个网站或API的基础。

Gin安装使用

Gin是一个golang的微框架,封装比较优雅,API友好,源代码比较确。具有快速灵活,容方便等特点。其实对于golang而言,web框架的依赖远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一个常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。
Gin 官方文档地址: https://gin-gonic.com/zh-cn/docs/

安装gin

 go get -u github.com/gin-gonic/gin
处理下载github包报错问题

问题描述:由于网络原因访问github网站会异常缓慢。

解决办法:配置国内镜像。

具体配置:

1、修改环境变量,增加以下配置:

GO111MODULE=on
GOPROXY=https://goproxy.io

请添加图片描述

2、修改GoLand配置:

打开设置,找到Go Modules,增加配置

GOPROXY=https://goproxy.io

请添加图片描述

RestFul Api

旧版请求:

get /user
post /create_user
post /update_user
post /delete_user

Restful Api:

get /user
post /user
put /user
delete /user
加载静态页面
ginServer := gin.Default()
ginServer.Use(favicon.New("./微信图片_20220629135324.ico"))
//加载静态页面
ginServer.LoadHTMLGlob("templates/*")
//加载资源文件
ginServer.Static("/static", "./static")
接收前端传递的参数,地址中包含参数
///user/info?userid=1&username=wk
ginServer.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/wk
ginServer.GET("/user/info/:userid/:username", func(context *gin.Context) {
   userId := context.Param("userid")
   userName := context.Param("username")
   context.JSON(http.StatusOK, gin.H{
      "userId":   userId,
      "userName": userName,
   })
})
前端给后端传递json
ginServer.POST("/json", func(context *gin.Context) {

   //返回[]byte
   data, _ := context.GetRawData()
   var m map[string]interface{}

   //包装为json数据 []byte
   _ = json.Unmarshal(data, &m)
   context.JSON(http.StatusOK, m)
})
支持函数式编程
ginServer.POST("/user/add", func(context *gin.Context) {
   username := context.PostForm("username")
   password := context.PostForm("password")
   context.JSON(http.StatusOK, gin.H{
      "mag":      "ok",
      "username": username,
      "password": password,
   })
   //context.HTML(http.StatusOK, "login.html", gin.H{
   // "msg": "这是go后台传递过来的数据",
   //})
})
路由
ginServer.GET("/test", func(context *gin.Context) {
   //重定向 301
   context.Redirect(301, "https://www.baidu.com")
})

//404
ginServer.NoRoute(func(context *gin.Context) {
   context.HTML(http.StatusNotFound, "404.html", "")
})

//路由组
userGroup := ginServer.Group("/user")
{
   userGroup.GET("/add")
}
自定义Go中间件 拦截器
//定义
func myHandler() gin.HandlerFunc {
   return func(context *gin.Context) {
      //通过自定义中间件,设置的值,在后续的处理只要调用这个中间件都可以拿到这里的参数
      context.Set("userSession", "userId-1")
      //放行
      context.Next()
      //阻止
      //context.Abort()
   }
}

//引入
ginServer.Use(myHandler())

//使用
ginServer.GET("/user/info", myHandler(), func(context *gin.Context) {

		userSession := context.MustGet("userSession")
		log.Println(userSession)

		userId := context.Query("userid")
		userName := context.Query("username")
		context.JSON(http.StatusOK, gin.H{
			"userId":   userId,
			"userName": userName,
		})
	})

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品,洗地机肯定首当其冲,集洗吸拖为一体的清洁工具,省时又省力,可谓是家里清洁好助手,今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内,洗…

13.进程---

一、进程的概念 1.可以用ps或top查看进程 2.pid0;交换进程(作用是进程调度) pid1;init进程(作用是系统初始化) 3.getpid();//获取自身的进程标识符 4.getppid();//获取父进程的进程标识符 什么是父进程? 答&#x…

【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流

大家好,我是虎哥,今天找了一套海康的相机,想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频,当然,可以选择VLC去查看,顺道我也用GStreamer 来测试了一下&…

HashMap原理详解

一、hashmap简介 hashmap是Java当中一种数据结构,是一个用于存储Key-Value键值对的集合,每一个键值对也叫作Entry。 二、JDK7的HashMap1、JDK7时HashMap的数据结构 1、在JDK7之前,hashmap底层采用数组链表的数据结构来存储数据 2、插入数据采…

SpringBoot静态资源访问

静态资源路径 类路径下:/resources/static/、/resources/public/、/resources/resources/、/resources/META-INF/resources 这些路径下的资源均可直接访问;通过 http://ip:port/资源名称 访问即可 可在配置文件中对访问路径和访问拦截规则进行设置&…

【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

新增的自定义控件一般放在默认的【加载项】选项卡下,但是根据需求,我们可能需要将控件放在新的自定义选项卡下,在自定义选项卡添加系统自带的控件,将自定义的按钮等控件放在右键菜单栏里以方便使用,等等。 下面就以一…

Maven:工程的拆分与聚合

Maven 拆分与聚合创建父工程创建子模块pom.xml配置示例拆分与聚合 在 Maven 中, 拆分是将一个完整的项目分成一个个独立的小模块,聚合是将各个模块进一步组合,形成一个完整的项目。接下来简单示例拆分与聚合的过程。 创建父工程 父工程,一个pom工程,目录结构简单,只需有…

cocos2dx 4.0 - cpp - pc版 环境搭建

开发环境vs2022 cocos2dx4.0 python2.7.18 cmake3.25安装教程(环境搭建)安装VS2022-Community, 勾选c进行安装安装cmake3.25, 勾选环境变量进行安装安装python2.7.18, 勾选环境变量进行安装下载cocos2dx4.0并解压配置cocos2dx:运行cmd,进入…

DCL 数据控制语言

1、简介 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 2、管理用户 2.1 查询用户 select * from mysql.user;查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问…

Nuxtjs

SSR渲染 SSR:在服务器端将Vue渲染成HTML返回给浏览器 优点 对SEO支持好SPA单页渲染更快 npx create-nuxt-app nuxtDemo 修改开发地址 package.json文件中进行修改 "config":{"nuxt":{"host":"127.0.0.1","port…

朋友当上项目测试组长了,我真的羡慕了

最近我发现一个神奇的事情,我一个朋友居然已经当上了测试项目组长,据我所知他去年还是在深圳的一家创业公司做苦逼的测试狗,短短8个月,到底发生了什么? 于是我立刻私聊他八卦一番。 原来他所在的公司最近正在裁员&am…

01_Docker 简介

01_Docker 简介 文章目录01_Docker 简介1.1 Docker 简介1.2 Docker 组件1.2.1 Docker 客户端和服务区1.2.2 Docker 镜像1.2.3 Registry1.2.4 Docker 容器参考资料https://www.runoob.com/docker/ubuntu-docker-install.html 1.1 Docker 简介 Docker 是一个能够把开发的应用程…

HTML+CSS+JavaScript学习笔记~ 从入门到精通!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、HTML1. 什么是HTML&#xff1f;一个完整的页面&#xff1a;<!DOCTYPE> 声明中文编码2.HTML基础①标签头部元素标题段落注释水平线文本格式化②属性3.H…

SOFA Weekly|开源人、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…

Docker安装Tomcat、mysql、redis

目录 前言 一、安装Tomcat 二、安装mysql &#xff08;一&#xff09;简单版 &#xff08;二&#xff09;实战版 三、安装redis 前言 镜像可以先去Docker Hub Container Image Library | App Containerization 左上角搜&#xff0c;然后点进入可以看到具体的命令&#…

网络协议(TCP/IP)

目录一、网络分层模型二、OSI模型三、网络传输原理四、TCP/IP1、TCP/IP 原理2、TCP 三次握手/四次挥手3、Http协议和TCP/IP的区别五、HTTP原理六、HTTPS原理七、CDN原理一、网络分层模型 互联网的本质就是一系列的网络协议&#xff0c;最早由ISO国际组织定义为7层网络参考模型…

【JS】数组常用方法总结-功能、参数、返回值

数组常用方法总结-功能、参数、返回值 用简单的js示例 运行在线工具&#xff1a;链接: 菜鸟工具 菜鸟工具示意图&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/de8589eb1acf42abb0347d8a3a3bbdfa.png 1.会改变原有数组方法 &#xff08;1&#xff09;pu…

(考研湖科大教书匠计算机网络)第五章传输层-第三节:TCP和UDP对比

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;TCP和UDP概述二&#xff1a;TCP和UDP对比本节对应视频如下 【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】&#xff1a;TCP和UD…

ShowCase 专治开发的「我自测好了」

背景 开发提测时信心十足的说我自测过了肯定没问题&#xff0c;结果分分钟打脸&#xff0c;测试在测试环境一测就发现xx「功能」不可用、xx「流程」阻塞 产品验收在测试之后&#xff0c;导致验收的时候可能出现与设计不一致&#xff0c;造成返工成本和风险加大 1.开发自测质量…

常用聚类算法分析

1. 什么是聚类 1.1. 聚类的定义 聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇&#xff0c;使得同一个簇内的数据对象的相似性尽可能大&#xff0c;同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起…