![](https://img-blog.csdnimg.cn/483d39dac22b4503a980b5d0cb12b71f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go语言
文章平均质量分 84
go语言相关知识
N-1-萘乙基二胺盐酸盐
软件工程
展开
-
在Gin框架中加入Zap日志中间件
在使用gin.Default()的同时是用到了gin框架内的两个默认中间件Logger()和Recovery()。所以我们可以模仿Logger()和Recovery()的实现,使用我们的日志库来接收gin框架默认输出的日志。这样就能在gin框架中使用我们上面定义好的两个中间件来代替gin框架默认的Logger()和Recovery()了。这样只需要在main.go文件中导入Logger()函数,那么就实现了Gin框架中使用Zap日志了。原创 2023-10-12 20:10:48 · 629 阅读 · 0 评论 -
日志管理工具Zap笔记
以上就是Zap库的基本使用。Zap提供了两种类型的日志记录器:Sugared Logger和Logger。对于性能要求不是非常高的应用可以使用Sugared Logger。相比于Logger,Sugared Logger提供了printf风格的日志记录。对于性能要求非常高的应用需要使用Logger来保证性能。不管是Logger还是Sugared Logger,它们都有三个预制化的日志:zap.NewProduction()、zap.NewDevelopment()和zap.Example()。原创 2023-10-12 17:12:33 · 471 阅读 · 0 评论 -
validator库的使用详解
在做API开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。以前会使用大量的if判断参数的值是否符合规范,现在可以使用validator库来进行参数校验。我们只需要在结构体的Tag中添加validator标签就可以实现参数校验。同时Gin框架当前内部也集成了validator.v10这个库,在Gin框架中只要在结构体的Tag中添加binding标签就可以实现参数校验。原创 2023-10-11 21:08:39 · 829 阅读 · 0 评论 -
Swagger-go学习笔记
在前后端分离的项目开发过程中,如果后端开发人员能够提供一份清晰明了的接口文档,那么就能极大地提高前后端开发人员的沟通效率和开发效率。可是编写接口文档历来都是令人头痛的,而且后续接口文档的维护也十分耗费精力。最好是有一种方案能够既满足我们输出文档的需要又能随代码的变更自动更新,而Swagger正是那种能帮我们解决接口文档问题的工具。原创 2023-10-10 18:20:24 · 442 阅读 · 0 评论 -
go-redis 框架基本使用
使用事务后,Redis会按照命令的顺序执行这些命令,并且在执行过程中不会立即返回结果,只有在所有命令都执行完毕后,才会一次性返回所有命令的执行结果。使用流水线就是将多个执行的命令放入 pipeline 中,然后使用1次读写操作就像执行单个命令一样执行它们,就相当于把多个命令打包,然后一起发送给redis服务器,让redis服务器一次性执行完毕。我们需要一个函数,可以安全地减少用户的积分。这段代码的目的是监视用户的当前积分,如果在事务执行过程中,其他客户端改变了这个键的值(也就是用户的积分),那么。原创 2023-09-19 16:40:44 · 686 阅读 · 1 评论 -
GORM---高级查询
数据表Users表:Email表:子查询是指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件。运行结果如下:由于平均年龄需要计算,所以内层的SELECT语句的作用是为了得到平均年龄(connect.DB.Table(“users”).Select(“AVG(age)”)),外层的SELECT语句的作用就是条件判断。运行结果如下:虽然这个子查询的例子的实际意义不大,但实在是想不出什么好的例子了。首先subQuery变量存储的是内层SELECT语句的查询结果,就是查询在users表中原创 2023-06-13 18:09:16 · 1880 阅读 · 0 评论 -
Go项目配置管理工具---Viper
命令行参数环境变量配置文件显然,对于Go项目而言,单个去读取命令行、环境变量、配置文件并不难,但一个个读取却是很麻烦,有没有一个第三方库可以帮我们一次性读取上面几种数据源的配置呢?有的,就是使用 viper 库,viper支持读取不同数据源和不同格式的配置文件,是Go项目读取配置的神器。原创 2023-06-09 09:22:20 · 3318 阅读 · 6 评论 -
GORM---初级查询
如果FirstOrCreate方法不能找到相应的记录,则底层会使用insert的SQL语句创建一条记录,并添加Attrs方法设置的属性到新纪录中。在使用FirstOrInit这个方法的大前提下,不管怎么写,都不会把返回的数据插入到数据库,因为FirstOrInit这个方法只是用来做查询操作。根据给定的条件初始化一个新的对象 (仅支持 struct 和 map 查询条件),从数据库中查询符合条件的记录,如果找到了,则返回该记录;如果没有找到,则创建一条新的数据记录,并将其保存到数据库中。原创 2023-06-06 13:49:21 · 945 阅读 · 0 评论 -
GORM---创建
使用 CreateInBatches()方法。该方法可以一次性将多条数据记录批量插入到数据库中,从而提高插入数据的效率。CreateInBatches 方法的用法与 Create 方法基本相同,只是需要传入一个额外的参数,表示每批次插入的数据记录数量。使用CreateInBatches方法的好处就是CreateInBatches方法能够保证原子性,如果其中一条数据插入失败,则整个插入操作都会进行回滚。原创 2023-06-04 14:39:59 · 2009 阅读 · 2 评论 -
关于Go语言的json技巧
Go语言内置的 json 包使用 RFC3339 标准中定义的时间格式,对我们序列化时间字段的时候有很多限制。= nil {也就是内置的json包不认识我们常用的字符串时间格式,如 2023-04-10 00:00:01。时间类型字段的 JSON 序列化和反序列化,但是我认为这种方法并不是很实用。其实如果真的遇到前端传递过来的非标准的时间字段(像"2023-04-10 00:00:01"),办法就是定义两个结构体,第一个结构体的时间类型为string,第二个结构体的时间类型为Time。原创 2023-04-15 19:28:43 · 221 阅读 · 0 评论 -
Go语言的omitempty选项
在使用Golang的时候,不免会使用Json和结构体的相互转换,这时候常用的就是和两个函数。这时候在定义json结构体的时候,我们会用到这个字段,这个字段作用就是,看似简单,但是却有很多小坑,这篇文章带你稍微研究一下他的用途和功能。omit:v. 删除;忽略;漏掉;遗漏;不做;未能做;adj. 省略了的;省去的;原创 2023-04-10 08:34:44 · 1689 阅读 · 0 评论 -
使用雪花算法生成ID
共12bit,是毫秒内的序列号,即统一毫秒内生成的第几个ID,其二进制数为2^12即4096,所以同一雪花算法服务在同一毫秒内可生成4096个序列号ID,如果超出了,就只能等待下一毫秒再生成。共10bit,是当前机器(服务器)的ID,其二进制数为210即1024,所以使用雪花算法的服务最多可以同时部署在1024台服务器上。,也就是一个雪花算法服务最多能部署在25个机房,每个机房最多有2^5个机器(服务器)。二进制中最高位为1的是负数,而在随机ID中,只能为正数,故该位只能为0,无意义。原创 2023-04-09 11:32:46 · 368 阅读 · 0 评论 -
Gin框架---文件操作
常用的静态文件加载有三个函数:Static()可以加载整个静态文件的目录,第一个参数是api,第二个参数是那个静态文件目录相对于当前执行这条语句的相对路径,当然也可以写绝对路径,绝对路径就是:“D:/GolandProjects/blog_demo/web/static”,不是以当前项目名为根目录,而是D盘为根目录。StaticFS()从本质上说其功能和r.Static()完全一样,那功能完全一样为什么还要写两个方法呢?这只是一个习惯差别,一般来说:r.Static()用于加载原创 2023-03-28 10:59:27 · 337 阅读 · 0 评论 -
Gin框架---参数获取和绑定
下面的示例代码演示了BindJSON()和ShouldBindJSON,它能够基于请求自动提取JSON类型的数据,并把值绑定到指定的结构体对象。数据绑定是利用结构体的反射机制来实现的,只要结构体里面有相应的Tag标签,就能实现对应数据类型的绑定。Params()方法是一次性获取所有的Path参数,返回的是Params类型,该类型的定义如下。把获取的Path参数的前面加上“ : ”,就表示这个Path参数是要获取的参数。需要注意的是切片类型的参数和字典类型的参数的写法。Query()用来获取参数。原创 2023-03-29 18:42:38 · 814 阅读 · 0 评论 -
Gin框架---路由和重定向
Gin框架作为一个轻量级的Web框架,其路由基本原理就是构造一个路由地址的前缀树,路由使用的是httprouter这个库。对于第一个路由,输入的路由参数必须要有username和password,但凡少了其中的一个,就会报错(返回404,也就是匹配不到路径)。也就是说有“ : ”的Path参数是必须要使用的路由参数。对于第二个路由,输入的路由参数必须要有name参数,可以没有age参数,当不输入age参数时将会重定向到/user/name/路由下面。也就是说有“ * ”的Path参数不是必须的路由参数原创 2023-03-30 18:17:14 · 828 阅读 · 0 评论 -
Gin框架---中间件
Gin中的中间件必须是一个gin.HandlerFunc类型。原创 2023-03-31 15:40:45 · 596 阅读 · 0 评论 -
Gorm连接Mysql时相关配置问题的看法
这个结构体的第一个变量是一个指针,指向gorm包里面的Config结构体,这个结构体的主要作用就是可以自定义设置数据库的一些配置信息。上面sql包里面的DB结构体的大致内容就是关于数据库的连接数量,连接状态和时间等信息。从源码中可以看到,该方法的接收者是gorm包里面的bd对象(该对象的类型就是前面讲的DB结构体类型),但返回值是sql包里面的DB类型(并不是gorm包里面的DB类型)。需要两个参数,一个是关于mysql的相关配置,另一个是gorm的相关配置。其他的字段用的非常少,当有需要的时候在去研究。原创 2023-03-09 16:46:07 · 992 阅读 · 0 评论 -
使用Gorm连接远程服务器上的mysql数据库
go语言使用Gorm数据库连接技术实现连接远程云服务器上的mysql数据库原创 2022-11-15 17:39:24 · 699 阅读 · 0 评论 -
Golang语言实现学生信息管理系统
Go语言基础知识巩固,学生信息管理系统使用的语法有:基本数据类型,切片,结构体,条件判断,循环,函数,方法等基础知识。原创 2022-10-19 09:48:45 · 566 阅读 · 0 评论