服务搭建尝试 | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

环境

go get github.com/sinlovgo/hertz

go get github.com/jinzhu/gorm

数据库连接

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
    db, err := gorm.Open("mysql", "user:123456@/database?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    }
    defer db.Close()
}

定义USER的模型

type User struct {
    gorm.Model
    Username string `gorm:"unique_index;not null"`
    Email    string `gorm:"unique_index;not null"`
    Password string `gorm:"not null"`
}

使用了GORM提供的Model结构体来定义模型的ID属性。还定义了Username、Email和Password属性,使用gorm标记来指定字段的属性,如not null和unique_index等

模型映射

func main() {
    db, err := gorm.Open("mysql", "user:123456@/database?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    }
    defer db.Close()

    db.AutoMigrate(&User{})
}

redis使用

import (
    "github.com/go-redis/redis"
)

func main() {
    redisClient := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", 
        DB:       0,  
    })

    _, err := redisClient.Ping().Result()
    if err != nil {
        panic("failed to connect redis")
    }
}

使用了go-redis库提供的NewClient方法来创建Redis连接

API的实现

import (
    "github.com/sinlovgo/hertz"
)

func main() {
    router := hertz.NewRouter()

    // add API routes here

    hertz.ListenAndServe(":8080", router)
}

使用Hertz提供的NewRouter方法来创建HTTP路由器,用Add方法来添加API路由,使用ListenAndServe方法来启动HTTP服务器。

创建用户

import (
    "encoding/json"
    "github.com/go-redis/redis"
    "github.com/sinlovgo/hertz"
    "github.com/jinzhu/gorm"
)

func main() {
    // create database connection and Redis client

    router := hertz.NewRouter()

    router.Post("/users", func(c *hertz.Context) {
        // parse request body
        var user User
        err := json.NewDecoder(c.Request.Body).Decode(&user)
        if err != nil {
            c.JSON(hertz.StatusBadRequest, hertz.M{"error": err.Error()})
            return
        }

        // create user model
        db.Create(&user)

        // cache user data
        redisKey := "user:" + strconv.Itoa(int(user.ID))
        redisClient.Set(redisKey, user, 0)

        // return response
        c.JSON(hertz.StatusOK, user)
    })

    // start HTTP server
    hertz.ListenAndServe(":8080", router)
}

实现创建用户的API。接收JSON格式的请求体,包含用户名、邮箱和密码等属性。使用GORM创建用户模型,并将其保存到数据库中,将使用Redis缓存用户数据,以提高应用程序性能, 使用了Hertz提供的Post方法来创建POST路由。用json包解析请求体,并创建用户模型。GORM提供的Create方法将用户模型保存到数据库中。用go-redis库提供的Set方法将用户数据保存到Redis缓存中.