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