GIN

server/2024/12/18 23:47:49/

gin是什么 

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。如果你需要极好的性能,使用 Gin 吧。

特点:gingolang的net/http库封装的web框架,api友好,注释明确,具有快速灵活,容错方便等特点。

go其他web框架:

  • beego:开源的高性能Go语言Web框架。
  • Iris:全宇宙最快的Go语言Web框架,支持MVC。

gin的安装

        go语言包的安装都十分简单,对与gin的安装,仅需要一行命令(开启go mod,并且配置了正确的代理)

  go get -u github.com/gin-gonic/gin

gin框架中文文档:https://gin-gonic.com/zh-cn/docs/

gin的使用

使用gin创建一个hello world网页

package mainimport "github.com/gin-gonic/gin"func main() {router := gin.Default()router.GET("/hello", func(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello World!"})})router.Run("127.0.0.1:8080")
}

启动成功:

 十分的快捷简单!!!!😆😆😆😆

RESTful API

55RESTful:用url去定位资源、用HTTP动词GET、POST、DELETE、PUT去描述操作。

RESTful API就是REST风格的API,rest是一种架构风格,跟编程语言无关,跟平台无关,采用HTTP做传输协议。

REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

  • GET获取资源
  • POST新建资源
  • PUT更新资源
  • DELETE删除资源

只要API程序遵循了REST风格,就可以成为RESTful API。

Gin框架支持RESTful API的开发

	router.GET("/get", func(c *gin.Context) {c.JSON(200, gin.H{"message": "get"})})router.POST("/post", func(c *gin.Context) {c.JSON(200, gin.H{"message": "post"})})router.PUT("/put", func(c *gin.Context) {c.JSON(200, gin.H{"message": "put"})})router.DELETE("/delete", func(c *gin.Context) {c.JSON(200, gin.H{"message": "delete"})})

 

响应HTML页面

目录:

main.go

package mainimport ("github.com/gin-gonic/gin""github.com/thinkerou/favicon""net/http"
)func main() {router := gin.Default()router.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"message": "myHTML",})})// Gin框架中使用LoadHTMLGlob()或者LoadHTMLFiles()方法进行HTML模板渲染。//router.LoadHTMLGlob("template/*")router.LoadHTMLFiles("template/index.html")// 当我们渲染的HTML文件中引用了静态文件时// 我们只需要按照以下方式在渲染页面前调用gin.Static方法即可。router.Static("/static", "./static")router.Run("127.0.0.1:8080")
}

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>我的Go页面</title><link rel="stylesheet" href="/static/css/style.css"><script src="/static/js/common.js"></script>
</head>
<body><h1>首页</h1>
</body>
</html>

 style.css

body {background: rosybrown;
}

 

        css,js之后也会出文章

JSON响应

1、返回普通数据类型

router.GET("/hello", func(c *gin.Context) {c.JSON(200,"request success")})

2、返回结构体

	router.GET("/hello", func(c *gin.Context) {user := struct {Username string `json:"username"`PassWord string `json:"password"`}{Username: "zhangsan",PassWord: "123456",}c.JSON(http.StatusOK, user)})

3、返回map

	router.GET("/hello", func(c *gin.Context) {type user struct {Username string `json:"username"`PassWord string `json:"password"`}m := map[int]user{}m[1] = user{"zhangsan", "123456"}m[2] = user{"lisi", "123456"}c.JSON(http.StatusOK, m)})

4、返回切片结构体

	router.GET("/hello", func(c *gin.Context) {type user struct {Username string `json:"username"`PassWord string `json:"password"`}users := make([]user, 2)users[0] = user{"zhangsan", "123456"}users[1] = user{"lisi", "123456"}c.JSON(http.StatusOK, users)})

获取请求参数

1、获取url中的参数

        当form表单中的method属性为get我们提交的字段值会显示在url中

	router.GET("/login", func(c *gin.Context) {c.HTML(200, "login.html", nil)})router.LoadHTMLGlob("template/*")

获取url中的参数方法:

	router.GET("/login", func(c *gin.Context) {username := c.Query("username")password, ok := c.GetQuery("password")if !ok {password = "获取password失败"}c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

2、接收restful风格的参数

请求的参数通过URL路径传递,例如:/login/zhangsan/123456。 获取请求URL路径中的参数的方式如下。

	router.GET("/login/:username/:password", func(c *gin.Context) {// 通过 param 获取参数username := c.Param("username")password := c.Param("password")//返回json数据c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

3、接收form表单提交的数据

	router.POST("/login", func(c *gin.Context) {username := c.PostForm("username")password := c.PostForm("password")c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

4、获取json参数

当前端请求的数据通过JSON提交时,例如向/json发送一个POST请求,则获取请求参数的方式如下:

// 编写请求
router.POST("/json", func(c *gin.Context) {// GetRawData : 从c.Request.Body读取请求数据, 返回 []byteb, _ := c.GetRawData()// 定义map或结构体接收var m map[string]interface{}// 包装为json数据_ = json.Unmarshal(b, &m)c.JSON(http.StatusOK, m)
})

路由

1、重定向

http重定向

	//重定向router.GET("/test", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "http://www.google.com")})

2、路由重定向

	router.GET("/test", func(c *gin.Context) {c.Request.URL.Path = "/test2"router.HandleContext(c)})router.GET("/test2", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "test2"})})

3、404页面

没有匹配到路由的请求都返回404.html页面。

	router.NoRoute(func(c *gin.Context) {c.HTML(http.StatusNotFound, "404.html", nil)})

4、路由组

我们可以将拥有共同URL前缀的路由划分为一个路由组,也可以多重嵌套。

package mainimport "github.com/gin-gonic/gin"func Group(router *gin.Engine) {userGroup := router.Group("/user"){ //习惯性一对`{}`包裹同组的路由,这只是为了看着清晰,你用不用`{}`包裹功能上没什么区别userGroup.GET("/1", func(c *gin.Context) {}) //   /user/1userGroup.GET("/2", func(c *gin.Context) {}) //   /user/2userGroup.GET("/3", func(c *gin.Context) {}) //   /user/3}
}


http://www.ppmy.cn/server/151293.html

相关文章

用于日语词汇学习的微信小程序+ssm

日语词汇学习小程序是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式&#xff0c;所以有必要开发日语词汇…

scala基础_数据类型概览

Scala 数据类型 下表列出了 Scala 支持的数据类型&#xff1a; 类型类别数据类型描述Scala标准库中的实际类基本类型Byte8位有符号整数&#xff0c;数值范围为 -128 到 127scala.Byte基本类型Short16位有符号整数&#xff0c;数值范围为 -32768 到 32767scala.Short基本类型I…

ctfshow-文件包含

78-php&http协议 GET传参&#xff0c;参数为file&#xff0c;没有过滤&#xff0c;直接包含 解法一&#xff08;filter&#xff09; payload: ?filephp://filter/readconvert.base64-encode/resourceflag.php得到一串base64&#xff0c;解码之后则为flag.php的内容 解法二…

C++小工具封装 —— NetWork(TCP、UDP)

在之前的文章中我们介绍到也写到基于TCP和UDP协议的网络通信。本篇我们又闲得无聊把这俩给封装成一个小工具以满足实际应用时多功能网络服务器的需要。 这个NetWork小工具是在Windows下制作的所以别忘了该有的头文件。C中编写我们就遵循面向对象的思想来。 #ifndef NETWORK_H …

开源分布式系统追踪-03-CNCF jaeger-02-快速开始

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么&#xff1f; cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …

TQ15EG开发板教程:使用SSH登录petalinux

本例程在上一章“创建运行petalinux2019.1”基础上进行&#xff0c;本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口&#xff0c;注意串口插入后会识别出两个串口号&#xff0c;都需要打开&#xff0c;查看串…

【计算机视觉】医疗图像关键点识别

1. CNN 1.1. 设备参数 1.2. 代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms from tqdm import tqdm import os import cv2 import numpy as np import time im…

什么是正则化?Regularization: The Stabilizer of Machine Learning Models(中英双语)

正则化&#xff1a;机器学习模型的稳定器 1. 什么是正则化&#xff1f; 正则化&#xff08;Regularization&#xff09;是一种在机器学习模型训练中&#xff0c;通过约束模型复杂性以防止过拟合的技术。 它的核心目标是让模型不仅在训练集上表现良好&#xff0c;还能在测试集上…