当前位置: 首页 > news >正文

gin投票项目5

对应视频V3版本

1.优化用户注册的功能

增加扩展字段

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

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

UUID具有全局唯一性;

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

建立uuid的唯一索引

image-20231128201711551

image-20231128201741487

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

测试:

image-20231128202827771

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

相关文章:

  • 关于Anaconda的安装和环境部署(此章专为新手制定)
  • python 中Windows编程一些心得
  • C Primer Plus阅读--章节13-15
  • matplotlib 默认属性和绘图风格
  • 【教3妹学编程-算法题】需要添加的硬币的最小数量
  • 如何搭建eureka-server
  • STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计
  • 分布式ID服务实践
  • 数据库系统相关概念
  • windows如何解决端口冲突(实用篇)
  • 设计模式--建造者模式
  • 【开源】基于Vue.js的实验室耗材管理系统
  • 人大金仓V8R6进阶授权操作
  • 二叉树的最大深度(力扣
  • adaptive原理
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [Vue CLI 3] 配置解析之 css.extract
  • 07.Android之多媒体问题
  • Centos6.8 使用rpm安装mysql5.7
  • ECMAScript入门(七)--Module语法
  • express如何解决request entity too large问题
  • Flex布局到底解决了什么问题
  • JavaScript对象详解
  • Java编程基础24——递归练习
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mockjs让前端开发独立于后端
  • Otto开发初探——微服务依赖管理新利器
  • spring boot 整合mybatis 无法输出sql的问题
  • Zepto.js源码学习之二
  • 阿里云购买磁盘后挂载
  • 彻底搞懂浏览器Event-loop
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 如何实现 font-size 的响应式
  • 深度学习在携程攻略社区的应用
  • 我与Jetbrains的这些年
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​iOS安全加固方法及实现
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (MATLAB)第五章-矩阵运算
  • (安卓)跳转应用市场APP详情页的方式
  • (二)JAVA使用POI操作excel
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (七)Knockout 创建自定义绑定
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)C#调用WebService 基础
  • (转载)(官方)UE4--图像编程----着色器开发
  • .form文件_SSM框架文件上传篇
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证