2024年最新版Gin快速入门教程,零基础入门到精通

424 阅读3分钟

2024年最新版Gin快速入门教程,零基础入门到精通,我们从下面内容来逐步学习

一、Gin介绍

  • Gin是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能高效的追求者,推荐你使用 Gin 框架。

  • Gin最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候也推荐您使用Gin。

  • 当某个接口的性能遭到较大挑战的时候,这个还是可以考虑使用Gin重写接口。

  • Gin也是一个流行的 golang Web 框架,Github Strat 量已经超过了50k。

Gin 的官网:gin-gonic.com/zh-cn/

Gin Github 地址:github.com/gin-gonic/g…

二、Gin环境搭建

要安装Gin软件包,需要先安装Go并设置Go工作区。

1.下载并安装 gin:

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

2.将 gin 引入到代码中:

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

  1. (可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:

import "net/http"

4、新建 Main.go 配置路由

package main

import (

"github.com/gin-gonic/gin"

)

func main() {

// 创建一个默认的路由引擎

r := gin.Default()

// 配置路由

r.GET("/", func(c *gin.Context) {

c.JSON(200, gin.H{ // c.JSON:返回 JSON 格式的数据

"message": "Hello world!",

})

})

// 启动 HTTP 服务,默认在 0.0.0.0:8080 启动服务

r.Run()

}

5、运行你的项目

$ go run main.go

6、要改变默认启动的端口

r.Run(":9000")

如果 go get 失败请参考:

bbs.itying.com/topic/5ed08…

三、Golang 程序的热加载

所谓热加载就是当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们开发中

是非常便利的,可以快速进行代码测试,省去了每次手动重新编译

beego 中我们可以使用官方给我们提供的 bee 工具来热加载项目,但是 gin 中并没有官方提

供的热加载工具,这个时候我们要实现热加载就可以借助第三方的工具。

工具 1(推荐):github.com/gravityblas…

go get github.com/pilu/fresh
D:\gin_demo>fresh

工具 2:github.com/codegangsta…

go get -u github.com/codegangsta/gin
D:\gin_demo>gin run main.go

四、Gin框架中的路由

4.1、路由概述

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。

RESTful API是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路

由的时候建议参考 RESTful API 指南。

在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:

image.png

4.2、简单的路由配置

简单的路由配置(可以通过 postman 测试)

当用 GET 请求访问一个网址的时候,做什么事情:

r.GET("网址", func(c *gin.Context) {

c.String(200, "Get")

})

当用 POST 访问一个网址的时候,做什么事情:

r.POST("网址", func(c *gin.Context) {

c.String(200, "POST")

})

当用 PUT 访问一个网址的时候,执行的操作:

r.PUT("网址", func(c *gin.Context) {

c.String(200, "PUT")

})

当用 DELETE 访问一个网址的时候,执行的操作:

r.DELETE("网址", func(c *gin.Context) {

c.String(200, "DELETE")

})

路由里面获取 Get 传值

域名/news?aid=20


r.GET("/news", func(c *gin.Context) {

aid := c.Query("aid")

c.String(200, "aid=%s", aid)

})

动态路由

域名/user/20

r.GET("/user/:uid", func(c *gin.Context) {

uid := c.Param("uid")

c.String(200, "userID=%s", uid)

})

4.3、 c.String() c.JSON() c.JSONP() c.XML() c.HTML()

返回一个字符串

r.GET("/news", func(c *gin.Context) {

aid := c.Query("aid")

c.String(200, "aid=%s", aid)

})

返回一个 JSON 数据

func main() {

r := gin.Default()

// gin.H 是 map[string]interface{}的缩写

r.GET("/someJSON", func(c *gin.Context) {

// 方法一:自己拼接 JSON

c.JSON(http.StatusOK, gin.H{"message": "Hello world!"})

})

r.GET("/moreJSON", func(c *gin.Context) {

// 方法二:使用结构体

var msg struct {

Name

string `json:"user"`

Message string

Age

int

}

msg.Name = "IT 营学院"

msg.Message = "Hello world!"

msg.Age = 18

c.JSON(http.StatusOK, msg)

})

r.Run(":8080")

}

JSOPN

func main() {

r := gin.Default()

r.GET("/JSONP", func(c *gin.Context) {

data := map[string]interface{}{

"foo": "bar",

}

// /JSONP?callback=x

// 将输出:x({\"foo\":\"bar\"})

c.JSONP(http.StatusOK, data)

})

// 监听并在 0.0.0.0:8080 上启动服务

r.Run(":8080")

}

返回 XML 数据

func main() {

r := gin.Default()

// gin.H 是 map[string]interface{}的缩写

r.GET("/someXML", func(c *gin.Context) {

// 方式一:自己拼接 JSON

c.XML(http.StatusOK, gin.H{"message": "Hello world!"})

})

r.GET("/moreXML", func(c *gin.Context) {

// 方法二:使用结构体

type MessageRecord struct {

Name

string

Message string

Age

int

}

var msg MessageRecord

msg.Name = "IT 营学院"

msg.Message = "Hello world!"

msg.Age = 18

c.XML(http.StatusOK, msg)

})

r.Run(":8080")

}

渲染模板

router.GET("/", func(c *gin.Context) {

c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{

"title": "前台首页"

})

})

今天就分享到这里了,下一篇我们接续讲解Gin HTML模板渲染、静态文件服务等内容。(内容出自:IT营大地老师的 Golang+Gin框架+Gorm+Rbac+微服务+仿小米商城项目实战视频教程+Docker Swarm K8s云原生分布式部署课程课件。)