基于抖声大项目开发初步(二)| 青训营

78 阅读3分钟

基于抖声大项目开发初步(二)

数据库设计与Module模块数据结构定义

数据库设计

在GO语言中使用GORM数据库,可以有这几个字段是常常被考虑的:

  • ID(必须存在,且为主键,不可重复)
  • 创建时间
  • 更新时间
  • ID代表着记录的唯一编码,唯一性需要得到保证。这边我们采用雪花算法(Snowflake)来生成全局唯一的ID,保证全局不重复,充分满足了我们的需求,其唯一性!
    • 简介雪花算法(Snowflake): 结构为: 1位标识符 | 41位时间戳 | 10位机器ID | 12位序列号
      • 标识符:用于标识正负
      • 时间戳:使用的毫秒级的时间戳,41位则可以支持2^41 - 1 毫秒,大约可以支持69年
      • 机器ID:在分布式系统中,每个机器都有一个唯一的标识,通常为机器的MAC地址
      • 序列号:用于记录同一个毫秒生成的序列号,每毫秒可以生成2^12 - 1 个序列号
    • 使用: 引入包 github.com/bwmarrin/snowflake
      // 创建一个雪花节点
      node, err := snowflake.NewNode(1)    
      if err != nil {
        fmt.Println("Error:", err)
        return
      }
      
      // 生成id
      id := node.Generate()
      // 根据需要选择id的数据类型
      s := id.String()
      a := id.Int64()
      
  • 创建时间和更新时间直接在go里面用指定的字段就可以自动更新
    • CreateAt time.Time 创建时间字段 在创建记录的时候,会自动更新CreateAt对应的数据库内的字段为当前时间
    • UpdateAt time.Time 更新时间字段 在更新记录的时候,会自动更新UpdateAt对应的数据库内的字段为当前时间
  • 其他的数据库内的字段
    • 注意数据库内的datetime对应的是go里面的time.Time可以直接通过gorm自动获取
    • 其他的字段都是某个对象的相关信息,最共性的就是id和创建更新时间

Module模块数据结构定义

注意module定义的数据结构是go语言的数据结构,它连接前端的返回json、请求体和数据库的访问。我们常常会在定义moduel数据结构的时候,加上tag标签,来指定其字段在前端请求、返回json和数据库访问的特性。 以下简单介绍一些常见的tag的设置

  • 对于前端请求提交数据分三种:请求字符串、表单form和json,对于它们我们处理的方法不同。我们的框架采用的Gin,关注如何处理前端发送的不同类型数据。 以下在接口函数中实现,形式参数为c *gin.Context
    • 表单提交:ShouldBind 在结构体声明中tag为 form:"表单提交字段名"
    • JSON提交:ShouldBindJson 在结构体声明中tag为 json:"JSON提交字段名"
    • 请求字符串提交:ShouldBindQuery 在结构体声明中tag为 form:"请求字符串字段名"

如此可以实现参数的自动匹配响应字段并且绑定