Gin快速入门01 Gin环境搭建、Gin程序的热加载、Gin框架中的路由 | 青训营

425 阅读3分钟

Gin介绍

Gin是一个Go编写的轻量级http web框架,运行速度非常快;
Gin最擅长的就是Api接口的高并发,如果项目规模不大且业务相对简单,这个时候推荐用Gin;
当某个接口的性能遭到较大挑战的时候,也可以考虑使用Gin框架重写接口。

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

安装

要安装 Gin 包,需要先安装 Go 并设置 Go 工作区,安装go及其环境配置步骤在往期博文已详细列出,请移步往期博文。

打开终端-->cmd-->输入go version,出现如下界面则go安装成功。

image.png
继续输入go env,出现如下界面则表示go环境已成功搭建

image.png 下载并安装gin:

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

image.png

此步可能会出现报错,我这里的错误经使用代理成功解决[安装gin失败 # cd .; git clone -- https://github.com/gin-gonic/gin xcrun: error: invalid active develope_Sai_BAN的博客-CSDN博客](url)

开始

接下来就可以正式开启Gin框架的学习之旅啦

打开VScode,编写一个go程序

package main

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

func main() {
	//创建一个默认路由引擎
	r := gin.Default()
	//配置路由
	r.GET("/", func(c *gin.Context) {
		c.String(200, "值:%v", "你好gin")
	})
        //注意:此处200可更换为http.statusOK,此时需要引入"net/http"包
	r.GET("/news", func(c *gin.Context) {
		c.String(200, "我是新闻")
	})
        r.POST("/add", func(c *gin.Context) {
		c.String(200, "我是post请求,主要用于增加数据")
	})
	r.PUT("/edit", func(c *gin.Context) {
		c.String(200, "我是put请求,主要用于编辑数据")
	})
	r.DELETE("/delete", func(c *gin.Context) {
		c.String(200, "我是delete请求,主要用于删除数据")
	})
	r.Run(":8000") //启动一个web服务
}

在终端输入go run main.go启动服务,在浏览器中输入localhost://8000 image.png

Golang程序的热加载

热加载即当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们并发中是非常便利的,可以快速进行代码测试,省去了每次手动重新编译。

在cmd终端输入此命令:

go get github.com/pilu/fresh

接着输入fresh

image.png
接下来就能自动编译了,快来一起动手试试吧!

Gin框架中的路由

1、路由概述

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

通俗来讲,路由就是url地址到业务处理代码的映射。当用户输入一个url地址时,服务器该知道该用户返回什么内容。比如,当用户点击登录时,服务器应该做登录相关的事情,并给用户返回登录成功或失败的页面。当用户点击退出时,服务器应该做和退出相关的事情(比如清理用户登录的数据),并返回给用户退出之后的页面。一个url到一个具体的处理函数之间的映射叫做一条路由。

2.c.String() c.JSON() c.JSONP() c.HTML()

c.String()--返回一个字符串

package main

import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()
        r.GET("/", func(c *gin.Context) {
		c.String(200, "值:%v", "首页")
	})
        r.Run(":8081")
}

c.JSON()--返回一个JSON数据

package main

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

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 = "mst"
        msg.Message = "Hello world!"
        msg.Age = 20
        c.JSON(http.StatusOK, msg)
        })
        r.Run(":8081")
}

c.JSONP()--支持回滚填入

package main

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

type Article struct {
	Title   string
	Desc    string
	Content string
}
func main() {
	r := gin.Default()
        r.GET("/jsonp", func(c *gin.Context) {
		a := &Article{
			Title:   "i am a title-jsonp",
			Desc:    "destruction",
			Content: "test content",
		}
		c.JSONP(200, a)
	})
        r.Run(":8081")
}
//http://localhost:8081/jsonp?callback=xxx
//xxx({"Title":"i am a title-jsonp","Desc":"destruction","Content":"test content"});
	

c.HTML()--渲染模板,可显示html页面中的数据

package main

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

func main() {
	r := gin.Default()
	r.LoadHTMLGlob("templates/*") //配置模板文件,templates文件夹中有index.html文件
  //注意在路由上方配置r.LoadHTMLGlob("templates/*")
	r.GET("/index", func(c *gin.Context) {
		c.HTML(200, "index.html", gin.H{
			"title": "我是后台数据",
		})
	})
	r.Run(":8081")
}        

通过访问localhost:8081/index显示的页面内容为index.html中的内容,若想显示"我是后台数据",则需在index.html页面中加入{{.tilte}}来访问,如下图所示。

image.png

image.png