第十四章 gin基础

文章目录

Gin快速搭建一个web服务

  1. 下载包
go 复制代码
\\新建一个文件,文件名gitstudy,然后右击使用vscode打开,初始化目录,并下载包
go mod init ginstudy 
go get -u github.com/gin-gonic/gin
  1. 新建main.go
go 复制代码
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	//1. 创建一个路由引擎,之后可以在路由引擎中添加一些路由和路由处理逻辑
	r := gin.Default()
	//2. 添加路由到路由引擎,以及指定该路由的处理逻辑
	// GET("该路由的路径,处理该路由的逻辑")
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})
	r.GET("/", func(c *gin.Context) {
		//c.String
		//http.StatusOk, 就是状态码200,http这个包定义了相关状态码别名,直接调用就好
		c.String(http.StatusOK, "你在访问首页")
	})
	//3. 启动gin服务
	r.Run() // 默认监听8080,可以修改其他端口,r.Run(:8081)
}

Gin数据交互JSON串内容规范

  1. 用独立函数返回json串的写法
go 复制代码
// 定义一个函数,用于gin处理相关请求的逻辑,并返回json数据
func getUserInfo(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"name":    "马云",
		"age":     18,
		"address": "杭州",
	})
}

	//使用独立的函数处理逻辑
	r.GET("/api/user/info", getUserInfo)

浏览器访问

  1. 前后端分离时,返回j给前端json串常用的格式,这是相对标准的格式,可以给前端返回数据都按这个格式
go 复制代码
	/*
		{
			"status": 200, //请求已经收到,后端处理返回给前端状态码,命名自定义code、statusCode
			"message": "查询成功"
			"data": {
				"name": "马云",
				"age": "18",
				"address": "杭州",
			}
		}
	*/

Gin使用结构体返回数据给前端

go 复制代码
type UserInfo struct {
	Username string `json:"username"`
	Age      int    `json:"age"`
	Address  string `json:"address"`
}

type RetrunData struct {
	Status  int      `json:"status"`
	Message string   `json:"message"`
	Data    UserInfo `json:"data"`
}

func retrunDataWithStruct(c *gin.Context) {
	UserInfo := UserInfo{
		Username: "马云",
		Age:      18,
		Address:  "杭州",
	}
	RetrunData := RetrunData{
		Status:  200,
		Message: "用户信息查询",
		Data:    UserInfo,
	}
	c.JSON(http.StatusOK, RetrunData)
}


r.GET("/api/usr/infoWithSturct", retrunDataWithStruct)

Gin配置POST类型的路由

跟get配置基本一样,只是访问的需要postman使用post请求

go 复制代码
func addUser(c *gin.Context) {
	RetrunData := RetrunData{
		Status:  200,
		Message: "创建成功",
	}
	c.JSON(http.StatusOK, RetrunData)
}


r.POST("/api/user/add", addUser)

Gin获取GET请求参数

参数是什么?就是url 问号后面的字段。?articleId=149418888,多个参数使用&符号分隔

例如:https://editor.csdn.net/md/?articleId=149418888\&username=admin

1.配置接收参数

go 复制代码
	//接受参数
	u := c.Query("username")
	id, _ := strconv.Atoi(c.Query("id"))
	//去数据库中查询该用户信息
	fmt.Printf("拿到用户名:%s, ID:%d\n", u, id)
  1. 发送带参数请求

  2. 查看参数是否已接收到

相关推荐
呆萌很14 小时前
【Gin】文件上传下载(单文件 + 多文件)
gin
先跑起来再说3 天前
Go 排行榜系统的工程化实现:分布式锁、快照表与定时刷新
分布式·go·gin
必胜刻4 天前
一个异步生成游戏功能的落地复盘:Redis Stream + WebSocket + 状态补偿
redis·websocket·golang·gin·状态补偿
TE-茶叶蛋6 天前
B-tree vs GIN Trigram vs HNSW
gin
曾几何时`8 天前
Go(一)Gin框架 和 GORM机制
开发语言·golang·gin
老毛肚9 天前
Gin + GORM 接口可视化测试
gin
lolo大魔王9 天前
Gin 框架中间件超详细实战教程(原理、全局中间件、路由中间件、自定义中间件、跨域、日志拦截)
中间件·gin
lolo大魔王9 天前
Gin 框架响应格式与 HTML 模板渲染完整实战教程
前端·html·gin
必胜刻18 天前
Go 调用Coze工作流实现 AI 游戏生成
开发语言·ai·golang·gin
比特森林探险记19 天前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin