gin投票项目5

对应视频V3版本

1.优化用户注册的功能

增加扩展字段

1.增加一个UUID字段,vachar(50)。

2.增加一个UUID的唯一索引。

UUID具有全局唯一性;

方法:在数据库中新建一个列,名为uuid并移至主键下方,

建立uuid的唯一索引

gin投票项目5_第1张图片

gin投票项目5_第2张图片

使用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()
}

测试:

gin投票项目5_第3张图片

2.将所有数据库操作改造为原生SQL语句

为什么要用原生SQL

  1. 1.便于服务上线后,出现慢查询的时候进行排查。

  2. 2.简单业务场景下,原生SQL语句可以减少-次SQL语句Build的过程。 提高效率。

  3. 3.复查业务场景下, 原生SQL语句可以提高准确性,避免build的过程中,出现隐形BUG。

  4. 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:获取信息,关于资源的哪些属性是客户端可以改变的。

你可能感兴趣的:(gin)