aprendizaje del marco de ginebra (1)

0.Prefacio

El entorno de desarrollo utilizado en esta serie es el siguiente:

  • goland
  • ir 1.17.1

En esta sección, primero completamos la importación del marco gin en el proyecto y escribimos helleworld para realizar pruebas, luego importamos el paquete gorm y combinamos gorm y gin para desarrollar una lógica de registro simple.

1. Cree un directorio de trabajo

Cree el proyecto gin_test en goland y cree el archivo main.go

Insertar descripción de la imagen aquí

2. Instale y pruebe el marco GIN.

2.1 Instalar el paquete gin

Ingrese al directorio gin_test creado en la sección anterior e ingrese el siguiente comando

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

Tenga en cuenta que puede encontrar un error de tiempo de espera aquí porque el paquete está bloqueado. Podemos configurar el entorno GO para resolver este problema. Para obtener más detalles, consulte el otro artículo del blogger, configuración del módulo go .

Después de la instalación, podemos ver muchas dependencias de gin en go.mod.

2.2 Escribe helloworld para probar

Ingrese el siguiente código en el archivo main.go:

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

func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}

Después de ejecutar, ingrese http://localhost:8080/ping para ver el mensaje pong.

3. Instale y pruebe el paquete gorm

Ejecute el siguiente comando en el directorio gin_test:

go get -u gorm.io/gorm

Aquí estamos usando mysql, por lo que también debemos incluir los siguientes paquetes:

go get gorm.io/driver/mysql

Escribimos el siguiente código simple para realizar pruebas. El código define una estructura de usuario, que se asignará a una tabla en la base de datos, y se realizan algunas operaciones de adición, eliminación, modificación y consulta en función de esta tabla:

package main

import (
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

//定义结构体到数据库的映射,设置name为非空且唯一
type User struct {
   gorm.Model
    Name string `gorm:"not null;unique"`
   Telephone string
   Password string
}

func main() {
   db:=InitDb()
   //自动创建数据表
   db.AutoMigrate(&User{})
   db.Create(&User{Name: "yzy",
      Password: "123456"})
   var user User
   fmt.Print(user)
   fmt.Printf("----------\n")
   db.First(&user,"name=?","yzy")
   fmt.Print(user)
   fmt.Printf("----------\n")

}

func InitDb() *gorm.DB{
//一些数据库的参数
   username:="root"
   password:="123456"
   host:="localhost"
   port:="3306"
   charset:="utf8"
   database:="test" //使用test数据库

   dns:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
      username,
      password,
      host,
      port,
      database,
      charset)
    //后面还可以传入一些对数据库特殊的定义
   db,err:=gorm.Open(mysql.Open(dns))
   if err != nil {
      panic("failed to connect database,err:"+err.Error())
   }
   return db

}

No olvide iniciar el servicio de base de datos y crear la base de datos especificada en el código antes de ejecutarlo.

net start mysql
//进入mysql
mysql -u root -p
//创建数据库
creat database test

Consultar la base de datos después de ejecutar

select * from users;

4. Escribir lógica de registro

El código se muestra a continuación:

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

type User struct {
   gorm.Model
   Name string
   Telephone string `gorm:"unique;not null"`
   Password string `gorm:"not null"`
}

func main(){
   db:=InitDb()
   db.AutoMigrate(&User{})
   router:=gin.Default()
   router.GET("/register",Register)

   router.Run()
}


func Register(c *gin.Context){
   db:=InitDb()
//获取数据
   name:=c.Query("name")
   password:=c.Query("password")
   telephone:=c.Query("telephone")
   if len(telephone)!=11{
   	c.JSON(400,gin.H{
   		"error":"the telephone is not correct",
   	})
   	return
   }
//判断
   if isTelephoneExist(db,telephone){
   c.JSON(400,gin.H{
   	"error":"the telephone is already exit",
   		})
   	return
   }
   //插入数据
   db.Create(&User{Name: name,Password: password,Telephone: telephone})
   c.JSON(200,gin.H{
   	"msg":"succeed",
   })
   return
}

func isTelephoneExist(db *gorm.DB,telephone string)bool{
   var user User
   db.Where("password=?",telephone).First(&user)
   if user.ID!=0{
   	return true
   }else{
   	return false
   }
}

func InitDb()*gorm.DB{
   username:="root"
   password:="123456"
   database:="gin_demo"
   charset:="utf8"
   port:="3306"
   host:="localhost"
   dns:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True",
   	username,
   	password,
   	host,
   	port,
   	database,
   	charset)

   db,err:=gorm.Open(mysql.Open(dns))
   if err != nil {
   	panic("can't connect to the mysql"+err.Error())
   }
   return db
}

6. Resumen

Todas las funciones de una pequeña demostración implementada hoy están escritas en un solo paquete. Una vez que el negocio se expanda, dicha arquitectura se volverá muy inflada y difícil de mantener, porque la arquitectura del proyecto se rediseñará a continuación.

Supongo que te gusta

Origin blog.csdn.net/doreen211/article/details/129148590
Recomendado
Clasificación