- 博客(140)
- 资源 (4)
- 收藏
- 关注
原创 go项目中操作数据库使用gorm和gen对比,附查询案例代码
查询数据的时候应该使用gorm还是gen呢?实际上,Gen是gorm里面的一个工具,或者说是在gorm的基础上做了更进一步的封装。GORM 和 GORM Gen 都是 Go 语言中用于数据库操作的工具,它们在功能和使用方式上存在一些区别。GORM 适合需要高度灵活性和对数据库操作有深入控制的场景,而 GORM Gen 则更适合快速开发和代码规范统一的项目。
2025-04-14 17:04:26
991
原创 go-zero自动生成repository文件和测试用例
在软件开发中,尤其是在采用分层架构或者领域驱动设计(DDD)的项目里,repository(仓库)是一个关键概念,它起到数据访问层和业务逻辑层之间的桥梁作用,负责处理数据的持久化与检索,让业务逻辑层无需直接与数据库或其他数据存储交互。简单来说,repository 是一种设计模式,它把数据访问逻辑封装起来,让业务逻辑层和数据访问层解耦,从而提高代码的可维护性和可测试性。UserRepo 就是一个实现了该模式的具体类,它提供了对 User 模型的各种数据操作方法。
2025-04-10 16:47:43
873
1
原创 go-zero使用elasticsearch踩坑记:时间存储和展示问题
通过go写入ES的示例,但是里面存在一个细节问题,就是写入的时间和ES展示的时间相差8小时的问题。导致这个问题的原因是时区设置的问题。由于写入到ES的时候没有特别设置具体的时区,ES会当成UTC时间处理,也就是认为写入的时间是UTC的2025-04-02 14:32:00,然而北京时间比UTC时间晚8个小时,那么,可以推测kibana页面上看到的应该是北京时间。
2025-04-03 17:20:12
1035
1
原创 go-zero中使用elasticsearch的示例
go-zero中使用elasticsearch的示例:模拟一个常见的业务,就是写入系统日志的功能,在go-zero中将系统日志写入到ES中。文件,这个文件中主要实现ES索引的定义和写入数据、以及查询数据的逻辑。
2025-03-04 10:04:28
756
1
原创 go-zero中定时任务的用法
在go-zero框架中使用定时任务调度的写法示例,首先需要用到的扩展:`go get -u github.com/robfig/cron/v3`,在这里我写上两个示例的定时任务,分别为“20秒打印一次SayHello”,以及“每一分钟查询一次当前用户总数”;可以轻松的在go-zero中实现定时任务的调度了,可以精确到秒级别。
2025-02-25 11:57:36
669
原创 go语言简单快速的按顺序遍历kv结构(map)
在go语言中,如果需要对map遍历,每次输出的顺序是不固定的,多运行几次就会发现,每次运行后的顺序并不一致,因为go中的map的遍历是不保证顺序的。那么,直接在遍历的时候对key进行排序再按照key的顺序输出可以保证输出的都是按照key由小到大排序的结果。但是会存在缺陷。因此可以考虑存储为二维切片或结构体。
2025-02-12 18:43:29
529
原创 go-zero框架基本配置和错误码封装
每个层只需依赖这个上下文,而不需要直接处理底层的配置和初始化逻辑。是服务上下文的依赖注入,所有的配置项和数据库连接、以及业务逻辑所需的模型实例,都被集中管理在。接下来,我们把成功返回部分也优化一下,把原有的logic的成功返回部分改为统一封装的。上面只是配置了不同的env,还需要有一个方法来加载当前设定的env。同时可以新增如下配置文件,具体要在当前项目中运行哪个配置文件,修改。
2025-01-23 17:08:04
878
原创 go-zero框架快速入门
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成代码。
2025-01-06 15:31:07
1799
2
原创 go项目使用gentool生成model的gen.go问题
Gen Tool 是一个没有依赖关系的二进制文件,可以用来从数据库生成结构。出现这个情况,可能是这个工具的一个bug。如果改为生成全部表名,也不太方便,因为有时候其他小伙伴改动了某个表,不能随着当前版本上线,就会很被动。除非每次执行这个命令的时候,都要把之前已经有的数据表名都带上,会很麻烦。
2025-01-02 17:25:03
553
原创 使用PicGo和Gitee搭建自己的图床
我经常需要写一些技术文档,习惯使用Markdown来写文档。由于Markdown本质上是一种纯文本编辑器,它和传统的word或者其它富文本编辑器不一样,如果遇到插入图片的话,一般都是存放到文档本地,但是当文档移动到其它电脑,或者转发给其他人的时候,图片可能就会丢失。也就是说,将文档的图片存放到本地并不是一个明智的选择。因此,我决定寻找一些思路,将我的文档的图片存放到一个专门的图片仓库中。经过一些了解,我决定使用图床来存放我的文档的图片。
2024-12-20 15:52:27
1042
原创 在Ubuntu服务器上备份文件到自己的百度网盘
由于项目运行中会产生附件(比如图片、视频等二进制文件),一般情况下可以把网站的附件存储到OSS上,但是,OSS需要花钱,由于项目比较小,而且本着少花点钱的原则,还是把附件就放在了网站服务器上。那么,就需要考虑一个问题,附件文件的备份问题。如果服务器遭受攻击,那么有可能附件就找不回来了。
2024-12-11 18:23:52
1245
1
原创 macbook M1芯片(arm64架构)安装php的kafka扩展出错的解决方案
macbook M1芯片(arm64架构)安装php的kafka扩展出错的解决方案。M1芯片默认使用的arm64架构,在终端中执行命令 `arch -x86_64 zsh` 来切换架构,接下来,再重新安装 x86 的`brew、kafka、librdkafka、php-rdkafka` 就可以了。
2024-12-03 17:32:45
476
原创 Ubuntu搭建PHP开发环境操作步骤(保姆级教程)
最近自购了一个阿里云服务器,系统镜像为Ubuntu 22.04 ,在编译安装LNMP(nginx+php+mysql)环境的时候,踩了不少坑,因此决定把自己安装的过程记录下来,以备后用。本篇文章基本上属于保姆级别的教程,只要你的系统也是Ubuntu,基本上无脑式复制粘贴运行,就能搭建起LNMP的环境。
2024-11-21 10:06:41
2202
1
原创 thinkphp6中数据库的操作和增删改查导出Excel示例
thinkphp6中数据库的操作和增删改查导出Excel示例:直接导出的逻辑,先对数据列表的字段和表头设定,可以支持二维结构的解析;如果条件允许,还可以对生成的文件上传到OSS后,返回OSS的URL。如果需要导出数据表中的用户头像文件,和表格一起导出,可以对文件下载后生成压缩包。这里需要考虑到一个情况,如果导出的数据耗费的时间特别长(比如导出的数据量特别多,或者需要导出附件的时候),那么应该考虑通过消息队列异步导出。
2024-11-14 17:44:52
1115
原创 thinkphp6的项目结构配置和常用功能封装以及消息队列的用法
thinkphp6的项目结构配置和常用功能封装以及消息队列的用法。使用多应用模式,可以在一个项目中部署类似 admin、web、api 等多个应用;thinkphp 默认使用单应用模式部署,如果要使用多应用模式,需要安装多应用模式扩展think-multi-app。在 app/command目录下编写命令行脚本的逻辑,比如定时任务,或者比较耗时的执行脚本。thinkphp6 内置了一个消息队列服务 thinkphp-queue,它支持消息队列的一些基本特性:消息的发布,获取,执行,删除,重发,失败处理等。
2024-11-12 11:45:02
569
1
原创 Go语言Gin框架调用企业微信接口根据手机号获取userid
这篇文章主要是讲一下在Go语言Gin框架中对接企业微信获取数据的一个代码示例,主要涉及到Redis的基本用法、HTTP的GET和POST请求、对接企业微信接口获取数据并返回JSON。很多逻辑看似简单,但不能只看不练,只有多加练习,才能学以致用,融会贯通。先不要想着怎么把它做的最好,而是要先做出来v0.1版本,先别管好不好,先能运行起来,后面再慢慢优化。
2024-10-17 15:59:49
1139
原创 Go语言Gin框架的常规配置和查询数据返回json示例
在 上一篇文章中主要给大家分享了较多数据的时候如何使用go分页导出多个Excel文件并合并的实现方案,这一篇文章继续分享一下go语言的Gin框架的一些常规配置和业务中常用的查询数据库并返回json的实现方案。Gin是一个golang的微框架,基于 httprouter,具有快速灵活,容错率高,高性能等特点。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。
2024-10-15 17:25:36
1417
原创 使用Go语言的gorm框架查询数据库并分页导出到Excel实例
使用Go语言的gorm框架查询数据库并分页导出到Excel实例,导出数据部分,考虑到数据量可能较大,如果一次性查询全量数据,可能造成内存或CPU爆满,因此不建议一次性全部导出,而是采用分页导出到多个文件,然后再将多个文件合并为一个Excel表格文件。
2024-10-09 16:20:09
1516
5
原创 2024年了,go xorm生成mysql的结构体这么操作
xorm是一个Go语言的ORM库,支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle和SQL Server,并提供了丰富的查询语言。查了很多资料都和上面的解决方案类似,但是如今已经2024年9月了,我试了下上面的方案已经走不通了。后来根据xorm官网(https://xorm.io/) 的描述,现在需要安装`reverse`才能实现。踩了一些列坑之后,总结方法和操作步骤如下。
2024-09-20 17:13:37
1066
原创 数据库中的事务、undo log、redo log、binlog都是干啥的?
由于事务的机制比较复杂,涉及 redo log 和 undo log 的各种配合,所以需要考虑到事务执行过程的各种异常情况。当中途某个操作执行成功了,万一数据库宕机,数据库恢复过来之后会怎么处理这个事务。在 redo log 刷新到磁盘之前,都是回滚。如果 redo log 刷新到了磁盘,那么就是重放 redo log。如果 binlog 都已经提交成功了,那么就重放,否则就是回滚。如果回滚,用 undo log 来恢复数据。如果没有 undo log 就没有后悔药,没有办法回滚。
2024-06-25 15:04:10
1051
原创 PHP实现一个简单的接口签名方法以及思路分析
PHP实现一个简单的接口签名方法以及思路分析。B项目需要调用A项目的接口,由A项目为B项目分配 `AccessKey` 和 `SecretKey`,用于接口加密,确保不易被穷举,生成算法不易被猜测。最终需要确保包含签名的参数只能被有效的请求一次,重复请求则视为无效参数;并且设定参数有效时长(例如5分钟),超时则视为无效参数。
2024-06-06 16:22:28
938
2
原创 数据库中锁的机制和MVCC协议以及隔离级别
数据库中为什么需要「锁」,顾名思义,锁就是为了解决并发问题的,就像是一个柜子加了一把锁,那么其他没有钥匙的人都打不开这个柜子(无法写入数据)。在 MySQL 的 InnoDB 引擎里面,锁和索引、隔离级别都是有密切关系的,锁是依赖于索引来实现的。如果一个查询用了索引,那么会用行锁;如果没用到任何索引,那么就会用表锁。此外,在 MySQL 里面,间隙锁和临键锁是只工作在可重复读这个隔离级别下的。
2024-06-05 14:58:28
1491
原创 群晖NAS安装web服务器和搭建PHP环境
最近折腾了一台群晖NAS,并搭建了一套web服务器,关于其中的一些设置,和传统的Linux的配置还不太一样,因此记录下来。
2024-05-26 23:26:32
8138
原创 数据库中索引的底层原理和SQL优化
从数据结构上来说,在 MySQL 里面索引主要是 B+ 树索引。它的查询性能更好,适合范围查询,也适合放在内存里。MySQL 的索引又可以从不同的角度进一步划分。比如说根据叶子节点是否包含数据分成聚簇索引和非聚簇索引,还有包含某个查询的所有列的覆盖索引等等。数据库使用索引遵循最左匹配原则。但是最终数据库会不会用索引,也是一个比较难说的事情,跟查询有关,也跟数据量有关。在实践中,是否使用索引以及使用什么索引,都要以 EXPLAIN 为准。
2024-05-06 14:42:11
1233
2
原创 phpspreadsheet导出Excel报错问题汇总
PHP导出Excel出现的问题汇总和解决方案,phpspreadsheet实现导出Excel的方法封装
2024-03-27 18:52:57
887
原创 怎么保证微服务应用的高可用性?
早期某个系统调用第三方接口的时候,缺乏监控和告警,只有等用户出现问题联系客服的时候,或者业务方发现出现故障报告过来的时候才知道出问题了,这样对用户体验很不好。后面接入了监控和告警之后,在第三方接口出问题的短时间内,就能得到通知,然后快速启动各种容错预案,并且通知业务方和第三方。
2024-03-11 19:35:19
1403
1
原创 微服务架构中的 隔离和超时控制
如果要构建高可用和高性能的微服务架构,依然少不了“隔离”的使用。因为 在出现故障的时候,隔离可以把影响限制在一个可以忍受的范围内。一般的原则是 核心与核心隔离,核心与非核心隔离。隔离应该怎么样做才能做到 提升可用性、提升性能和提升安全性的目标呢?其实可以采取如下的措施:机房隔离、实例隔离、分组隔离、连接池隔离和线程池隔离、第三方依赖隔离等。超时控制是指在规定的时间内完成操作,如果不能完成,那么就返回一个超时响应。比如这个问题:调用某个接口时的超时时间应该设定为多久?以及你为什么认为这个超时设置是合理的?
2024-02-26 18:58:08
1259
原创 MacBook的nginx出现13: Permission denied 的问题分析和解决办法
说明是nginx没有权限访问这个CSS文件,查看了文件权限没问题,那么需要从nginx配置方面排查原因。原因在于,如果省略了group,nginx会认为组名和用户名一样。更换了电脑,发现网站的样式都没有了,直接访问CSS文件。然后重启nginx即可。
2024-02-19 16:22:53
1197
2
原创 微服务架构中的 限流和压测
限流是为了保证系统可用性,防止系统因为流量过大而崩溃的一种服务治理手段。从算法上来说,有令牌桶、漏桶、固定窗口和滑动窗口算法。还有动态限流算法,或者说自适应限流算法,比较有名的就是参考了 TCP 拥塞控制算法 BBR 衍生出来的算法。这些算法之间比较重要的一个区别是能否处理小规模的突发流量。从限流对象上来说,可以是集群限流或者单机限流,也可以是针对具体业务来做限流。比如说在登录的时候,可以针对 IP 进行限流。又或者在一些增值服务里面,非付费用户也会被限流。触发限流之后,具体的措施也可以非常灵活。
2024-01-02 11:57:44
1487
原创 Linux删除了大文件为什么磁盘空间没有释放?
rm命令删除文件的时候,只是删掉了inode数据,而文件的实际数据部分在 inode 被清除掉之后,会被覆盖并写入新的内容。但是如果文件在删除的时候是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程依旧可以读取该文件,系统就会认为该文件的磁盘空间一直被占用。虽然删除了 access_log 文件,但是由于 nginx 进程还在一直向这个文件写入内容,文件的 inode 并没有清除掉,系统内核认为文件并未删除,这才出现空间不释放的情况。
2023-12-01 11:41:35
617
原创 微服务架构中的 熔断和降级
微服务架构中,如果需要保障可用性,其中一个方式就是 熔断。熔断在微服务架构里面是指 当微服务本身出现问题的时候,它会拒绝新的请求,直到微服务恢复。通过熔断机制可以给服务端恢复的时间,比如 CPU 使用率已经超出负载了,此时服务端触发了熔断,那么新来的请求就会被拒绝,因此,服务端的 CPU 使用率就会在一段时间内降到100%以内。
2023-11-20 18:13:18
1262
原创 微服务的注册发现和微服务架构下的负载均衡
为什么需要服务注册与发现?一般来说,服务集群会部署在不同的机房和不同的机器上,监听不同的端口。当客户端收给服务端发送请求,怎么知道应该发送给哪个机器?这就需要用到“注册中心”。 最少连接数、最少活跃请求数和最快响应时间,都可以看作是选择了单一的指标来代表一个节点的负载,在实际工作中可以利用这个思路来设计自己的负载均衡算法。比如说在 CPU 密集型的应用里面可以设计一个负载均衡算法,每次筛选 CPU 负载最低的节点,但是难点是需要考虑 怎么采集到所有服务端节点的 CPU 负载数据。
2023-11-14 13:20:58
879
原创 Go语言Gin框架前后端分离项目开发工程化实例
Go语言Gin框架前后端分离项目开发工程化实例,后端通过模拟用户注册登录接口以及中间件校验,项目代码构建发布,前端使用Vue实现了一个简单的页面,然后调用后端接口。
2023-11-07 07:34:33
1004
原创 Go语言Gin框架Logrus日志管理和token身份验证
RSA加密是一种非对称加密,可以在不直接传递密钥的情况下完成解密,这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。Logrus是一个结构化的Go日志框架,功能强大,具有高度的灵活性,它提供了自定义插件的功能,有TEXT与JSON两种可选的日志输出格式。相比RSA,ECDSA优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。
2023-10-31 10:47:40
579
原创 Go语言Gin框架中使用MySQL数据库的三种方式
在Gin框架中使用MySQL的最简单的方式就是直接处理SQL语句;xorm是一个Go语言的ORM库,通过它可以很方便的操作数据库。它的设计重点是高性能和易用性。XORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle和SQL Server,并提供了丰富的查询语言。XORM还支持事务和缓存机制,可以提高数据库操作的性能。
2023-10-17 14:17:28
1307
原创 使用ELK收集解析nginx日志和kibana可视化仪表盘
收集nginx的文件日志并写入到队列(kafka/redis),然后在另一台机器上消费队列中的日志数据并流转到。kibana dashboard 是一个统计数据展示面板,可以通过不同的维度进行统计和展示。我这里用kibana7.17.12版本演示,不同版本的kibana界面可能不一样。然后打开ES的页面,账号:elastic,密码就是你刚才设置的密码。然后重新启动kibana,再次访问,需要输入账号和密码。输入y开始设置,六种密码设置完成后,需要再次重启ES。,需要设置以下六种账户的密码。
2023-08-31 16:07:20
2325
1
原创 使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志
使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志
2023-08-24 16:58:52
2230
1
原创 ELK中Logstash的配置和用法
Logstash的配置和用法,以及在ELK中收集系统日志并展示到kibana中的过程。Logstash是一个开源的、服务端的数据处理pipeline(管道),它可以接收多个源的数据、然后对它们进行转换、最终将它们发送到指定类型的目的地。Logstash是通过插件机制实现各种功能的,可以在下载各种功能的插件,也可以自行编写插件。Logstash实现的功能主要分为接收数据、解析过滤并转换数据、输出数据三个部分,对应的插件依次是input插件、filter插件、output插件。
2023-08-22 16:02:42
2817
1
Postman_v4.1.3[Chrome插件]
2019-03-14
《Go语言编程》高清完整版电子书.pdf
2019-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人