对应视频V3版本
1.优化用户注册的功能
增加扩展字段
1.增加一个UUID字段,vachar(50)。
2.增加一个UUID的唯一索引。
UUID具有全局唯一性;
方法:在数据库中新建一个列,名为uuid并移至主键下方,
建立uuid的唯一索引
使用UUID生成用户ID方法有很多
可能是基于随机数的,时间的,硬件地址的等等;
谷歌uuid的方法:生成的是string类型的
以后会使用雪花算法来优化
现在先演示谷歌的方式:
package main
import (
"fmt"
"github.com/google/uuid"
)
func GetUUID() string {
id := uuid.New() // 默认V4版本
fmt.Printf("uuid: %s, version: %s\n", id.String(), id.Version().String())
return id.String()
}
测试:
2.将所有数据库操作改造为原生SQL语句
为什么要用原生SQL
-
1.便于服务上线后,出现慢查询的时候进行排查。
-
2.简单业务场景下,原生SQL语句可以减少-次SQL语句Build的过程。 提高效率。
-
3.复查业务场景下, 原生SQL语句可以提高准确性,避免build的过程中,出现隐形BUG。
-
4.缺点就是需要多写一些代码。
建议,能用原生SQL语句的地方尽量自己编写SQL语句。两个原因:
1.对于业务的查询场景有一个清醒的认识。 便于后续的优化,排查,建索引等。
2.提高自己SQL的能力。简单的SQL场景不去练习,是不可能写出来复查场景的SQL的。
这些都是经历一个个BUG,迭代-个个业务场景 后的感受。
最重要原因:工作面试很大概率会让手写SQL语句。。。
什么是sql注入,应该怎么避免
SQL注入是一种常见的安全漏洞,它发生在应用程序未正确验证用户输入,并直接将用户提供的数据嵌入到SQL查询中。攻击者通过巧妙构造恶意输入,试图修改SQL查询的逻辑,从而执行非法的数据库操作。
避免:使用预编译语句,使用参数化查询,避免手动拼接SQL语句,输入验证和过滤,使用ORM框架
GORM有什么用
简要说一下,在gorm博客中我已经详细说明了
结构体映射: Gorm通过将Go语言中的结构体(Struct)映射到数据库表来工作。每个结构体代表数据库中的一个表,结构体的字段对应表中的列。
链式调用: Gorm的API设计采用了链式调用的方式,可以通过一系列的方法调用来构建查询语句。这种方式使得代码更具可读性和灵活性。
优势:提高了我们对数据库操作的便捷性
问题:降低了我们写sql的能力。。。所以简单的还是要自己写,锻炼能力;
3.将所有接口改造为RestFul接口
什么是RestFul接口?
一句话总结:本质上,把一切请求当作对一种资源的操作。有哪些操作:增删改查,也就是CURD。
常用动词
- GET (SELECT) :从服务器取出资源(1项或多项)
- POST (CREATE) :在服务器新建一个资源。
- PUT (UPDATE) :在服务器更新资源(客户端提供改变后的完整资源)
- PATCH (UPDATE) :在服务器更新资源(客户端提供改变的属性)。
- DELETE (DELETE) :从服务器删除资源。
不常用
- HEAD:获取资源的元数据。
- OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。