Ir a la instalación del marco GIN de idioma y comenzar

Ir a la instalación del marco GIN de idioma y comenzar


Estudié el lenguaje GO durante una semana antes y aprendí los conceptos básicos del lenguaje GO. Ahora estoy tratando de usar GIN, el marco más popular del lenguaje GO, para escribir algunas interfaces simples. Después de ver el video introductorio de GIN desde la Estación B, básicamente entiendo cómo escribir una interfaz y registraré los pasos básicos a continuación.

1. Cree un entorno de configuración

Usamos Goland para crear el primer entorno de desarrollo nuevo. Siempre que el idioma Go esté instalado en Windows, Goroot lo reconocerá automáticamente.
Insertar descripción de la imagen aquí
El nuevo proyecto solo tiene un archivo go.mod, que se utiliza para indicar las bibliotecas de terceros utilizadas en el proyecto.
Insertar descripción de la imagen aquí

2. Configurar el entorno

Cuando usamos bibliotecas de terceros, necesitamos descargarlas de github, pero a menudo github no logra conectarse, por lo que primero debemos configurar la dirección proxy de terceros. Agregamos la dirección de proxy en Configuración->Ir->Ir a Módulos->Entorno.

GOPROXY=https://goproxy.cn,direct

Insertar descripción de la imagen aquí

3. Descarga la última versión de Gin.

Instale el marco Gin en la Terminal en el IDE y use el siguiente comando para instalar Gin. Una vez completada la instalación, la dependencia se agregará automáticamente en require en go.mod.

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

Insertar descripción de la imagen aquí

4. Escribe la primera interfaz.

Cree el archivo main.go y luego escriba el siguiente código, que define una ruta /hello.

package main

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

func main() {
    
    

	ginServer := gin.Default()
	ginServer.GET("/hello", func(context *gin.Context) {
    
    
		context.JSON(200, gin.H{
    
    "msg": "hello world"})
	})

	ginServer.Run(":8888")

}

Compile, ejecútelo y acceda a él a través de un navegador para generar JSON.

Insertar descripción de la imagen aquí

5. Carga de páginas estáticas y archivos de recursos

Utilice el siguiente código para agregar las páginas estáticas (archivos HTML) y recursos dinámicos (JS) en el proyecto.

	// 加载静态页面
	ginSever.LoadHTMLGlob("templates/*")

	// 加载资源文件
	ginSever.Static("/static", "./static")

Esta es la lista de archivos de recursos del proyecto.
Insertar descripción de la imagen aquí
El archivo index.html es el siguiente

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

<h1>谢谢大家支持</h1>

获取后端的数据为:
{
   
   {.msg}}

<form action="/user/add" method="post">
        <p>username: <input type="text" name="username"></p>
        <p>password: <input type="text" name="password"></p>
        <button type="submit"> 提 交 </button>
</form>


</body>
</html>

Luego puede responder a una página en el front-end.

	// 响应一个页面给前端
	ginSever.GET("/index", func(context *gin.Context) {
    
    
		context.HTML(http.StatusOK, "index.html", gin.H{
    
    
			"msg": "这是go后台传递来的数据",
		})
	})

Insertar descripción de la imagen aquí

6. Varios métodos de transmisión de parámetros.

6.1 paso de parámetros de URL

Obtenga los parámetros pasados ​​por la URL en el backend.

	// 传参方式
	//http://localhost:8082/user/info?userid=123&username=dfa
	ginSever.GET("/user/info", myHandler(), func(context *gin.Context) {
    
    
		// 取出中间件中的值
		usersession := context.MustGet("usersession").(string)
		log.Println("==========>", usersession)

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

Se agrega una clave intermedia adicional arriba, que es el código ejecutado antes de ejecutar el código de la interfaz. La definición de myHandler es la siguiente:

// go自定义中间件
func myHandler() gin.HandlerFunc {
    
    
	return func(context *gin.Context) {
    
    
		// 设置值,后续可以拿到
		context.Set("usersession", "userid-1")
		context.Next() // 放行
	}
}

6.2 Pasar parámetros en forma de enrutamiento

	// http://localhost:8082/user/info/123/dfa
	ginSever.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,
		})
	})

6.3 El front-end pasa el formato JSON al back-end

	// 前端给后端传递json
	ginSever.POST("/json", func(context *gin.Context) {
    
    
		// request.body
		data, _ := context.GetRawData()
		var m map[string]interface{
    
    }
		_ = json.Unmarshal(data, &m)
		context.JSON(http.StatusOK, m)

	})

6.4 Pasar parámetros en formulario

	ginSever.POST("/user/add", func(context *gin.Context) {
    
    
		username := context.PostForm("username")
		password := context.PostForm("password")
		context.JSON(http.StatusOK, gin.H{
    
    
			"msg":      "ok",
			"username": username,
			"password": password,
		})
	})

7. Enrutamiento y grupos de enrutamiento

	// 路由
	ginSever.GET("/test", func(context *gin.Context) {
    
    
		context.Redirect(http.StatusMovedPermanently, "https://www.baidu.com")
	})

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

	// 路由组
	userGroup := ginSever.Group("/user")
	{
    
    
		userGroup.GET("/add")
		userGroup.POST("/login")
		userGroup.POST("/logout")
	}

	orderGroup := ginSever.Group("/order")
	{
    
    
		orderGroup.GET("/add")
		orderGroup.DELETE("delete")
	}

8. Código del proyecto main.go

package main

import (
	"encoding/json"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)

// go自定义中间件
func myHandler() gin.HandlerFunc {
    
    
	return func(context *gin.Context) {
    
    
		// 设置值,后续可以拿到
		context.Set("usersession", "userid-1")
		context.Next() // 放行
	}
}

func main() {
    
    
	// 创建一个服务
	ginSever := gin.Default()
	//ginSever.Use(favicon.New("./icon.png"))

	// 加载静态页面
	ginSever.LoadHTMLGlob("templates/*")

	// 加载资源文件
	ginSever.Static("/static", "./static")

	//ginSever.GET("/hello", func(context *gin.Context) {
    
    
	//	context.JSON(200, gin.H{"msg": "hello world"})
	//})
	//ginSever.POST("/user", func(c *gin.Context) {
    
    
	//	c.JSON(200, gin.H{"msg": "post,user"})
	//})
	//ginSever.PUT("/user")
	//ginSever.DELETE("/user")

	// 响应一个页面给前端
	ginSever.GET("/index", func(context *gin.Context) {
    
    
		context.HTML(http.StatusOK, "index.html", gin.H{
    
    
			"msg": "这是go后台传递来的数据",
		})
	})

	// 传参方式
	//http://localhost:8082/user/info?userid=123&username=dfa
	ginSever.GET("/user/info", myHandler(), func(context *gin.Context) {
    
    
		// 取出中间件中的值
		usersession := context.MustGet("usersession").(string)
		log.Println("==========>", usersession)

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

	// http://localhost:8082/user/info/123/dfa
	ginSever.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
	ginSever.POST("/json", func(context *gin.Context) {
    
    
		// request.body
		data, _ := context.GetRawData()
		var m map[string]interface{
    
    }
		_ = json.Unmarshal(data, &m)
		context.JSON(http.StatusOK, m)

	})

	// 表单
	ginSever.POST("/user/add", func(context *gin.Context) {
    
    
		username := context.PostForm("username")
		password := context.PostForm("password")
		context.JSON(http.StatusOK, gin.H{
    
    
			"msg":      "ok",
			"username": username,
			"password": password,
		})
	})

	// 路由
	ginSever.GET("/test", func(context *gin.Context) {
    
    
		context.Redirect(http.StatusMovedPermanently, "https://www.baidu.com")
	})

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

	// 路由组
	userGroup := ginSever.Group("/user")
	{
    
    
		userGroup.GET("/add")
		userGroup.POST("/login")
		userGroup.POST("/logout")
	}

	orderGroup := ginSever.Group("/order")
	{
    
    
		orderGroup.GET("/add")
		orderGroup.DELETE("delete")
	}

	// 端口
	ginSever.Run(":8888")

}

9. Resumen

Lo anterior es todo el contenido para comenzar con Gin. Si lo encuentra útil, dele me gusta y recójalo.

Supongo que te gusta

Origin blog.csdn.net/HELLOWORLD2424/article/details/132333923
Recomendado
Clasificación