基于抖声大项目开发初步(二)
数据库设计与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()
- 简介雪花算法(Snowflake):
结构为:
- 创建时间和更新时间直接在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:"请求字符串字段名"
- 表单提交:ShouldBind
在结构体声明中tag为
如此可以实现参数的自动匹配响应字段并且绑定