Ir a la instalación del marco GIN de idioma y comenzar
Directorio de artículos
- Ir a la instalación del marco GIN de idioma y comenzar
-
- 1. Cree un entorno de configuración
- 2. Configurar el entorno
- 3. Descarga la última versión de Gin.
- 4. Escribe la primera interfaz.
- 5. Carga de páginas estáticas y archivos de recursos
- 6. Varios métodos de transmisión de parámetros.
- 7. Enrutamiento y grupos de enrutamiento
- 8. Código del proyecto main.go
- 9. Resumen
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.
El nuevo proyecto solo tiene un archivo go.mod, que se utiliza para indicar las bibliotecas de terceros utilizadas en el proyecto.
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
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
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.
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.
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后台传递来的数据",
})
})
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.