自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(439)
  • 收藏
  • 关注

原创 Python中使用matplotlib.pyplot.show报错: FigureCanvasInterAgg‘ object has no attribute ‘tostring_rgb‘解决办法

在使用matplotlib.pyplot绘图时遇到AttributeError:'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'错误,这是由于PyCharm的特殊后端导致的。解决方案包括:1)在PyCharm设置中禁用科学模式(推荐);2)明确设置标准后端如matplotlib.use('TkAgg');3)使用try-except捕获异常并改为保存图片;4)更新PyCharm和matplotlib版本。最简单的临时解决方案是将plt

2026-04-18 11:06:11 180

原创 mysql 中如果条件where中有or,则要求or两边的字段都必须有索引,否则不能用到索引, 为什么?

摘要: MySQL中OR条件要求所有字段都有索引,主要原因在于B+Tree索引的有序存储和范围查询特性。当OR条件中部分字段无索引时,优化器会放弃索引而选择全表扫描,因为部分索引查找加全表扫描的成本高于直接全表扫描。解决方案包括:为所有OR字段创建索引、使用UNION重写查询或使用覆盖索引。最佳实践是避免随意使用OR,分析查询模式并创建合适索引,用EXPLAIN验证执行计划。索引合并功能仅在所有OR条件都有索引时才能生效。

2026-03-23 17:43:09 370

原创 跨行转账系统:基于 MVCC 的高并发分布式银行转账架构

本文详细解析了基于MVCC和分布式事务技术的跨行转账系统架构设计。系统通过分层设计实现发起行、接收行和清算中心的高效协同,采用MVCC机制优化高并发场景下的读写性能,同时保证金融级数据一致性。关键实现包括:全局唯一ID生成、消息队列异步处理、幂等性设计、补偿机制以及全面的监控告警体系。测试验证表明,该架构能够在保证ACID特性的前提下,实现高性能的跨行资金转移,满足金融系统对安全性、可靠性和高并发的严格要求。

2026-03-20 16:26:54 617

原创 mysql MVCC理解以及银行同行转账架构实现

MVCC(多版本并发控制)是一种非阻塞的并发控制机制,通过维护数据的多个版本实现高并发访问。本文详细介绍了MVCC的工作原理及在PostgreSQL、MySQL等数据库中的实现方式,重点分析了其在银行转账系统中的应用。系统采用Golang+MySQL实现,通过MVCC的快照读优化余额查询性能,使用FOR UPDATE确保转账操作的原子性,并选择REPEATABLE READ隔离级别保证数据一致性。文章还提供了完整的代码实现、性能优化建议和测试方案,展示了MVCC在金融系统中兼顾高并发和数据一致性的优势。

2026-03-20 15:29:03 344

原创 gorm 中的Updates Update, Save,Create , UpdateColumn 区别与联系

GORM数据操作方法对比摘要: GORM提供了多种数据操作方法,各具特点:Create用于插入新记录,触发Before/AfterCreate钩子;Save智能判断插入或更新,但会忽略零值且性能较差;Update更新单字段不触发钩子;Updates最常用,map参数不触发钩子且更新零值,struct参数触发钩子但跳过零值;UpdateColumn强制更新字段包括零值,不触发钩子。最佳实践推荐:批量更新用Updates(map),避免使用Save,更新零值用map或UpdateColumn,需触发钩子时用Up

2026-03-20 11:37:54 316

原创 goroutine协程泄露情况以及解决办法详解

Go协程泄露问题分析与解决方案 摘要:Go语言中的协程泄露(Goroutine Leak)是指协程无法正常退出导致资源无法回收的问题。常见泄露场景包括:通道操作无限阻塞、WaitGroup未完成、Ticker未停止、锁未释放等。泄露会导致内存耗尽、性能下降和文件描述符耗尽等严重后果。解决方案包括:使用context.Context传递取消信号、明确通道所有权、设置操作超时、defer释放资源等。可通过runtime.NumGoroutine()、pprof工具和集成测试检测泄露。关键预防原则是:为每个协程设

2026-03-19 09:33:29 332

原创 golang中常用的设计模式举例

本文展示了Go语言实现常见设计模式的典型方法。工厂模式通过函数封装对象创建,单例模式使用sync.Once保证线程安全,装饰器模式采用函数包装增强功能。观察者模式借助通道实现事件通知,策略模式通过接口替换算法。文章还介绍了适配器模式连接不兼容接口,责任链模式构建链表式处理流程,并重点演示了Go特有的Worker Pool和Fan-Out/Fan-In并发模式。这些实现充分利用了Go的接口组合、闭包、通道等特性,体现了"用通信共享内存"的并发哲学。

2026-03-12 15:56:41 98

原创 golang 锁实现原理与解析&锁机制(sync)种类与举例说明以及其使用场景

Go语言sync包提供了并发编程的基本同步原语,包括Mutex、RWMutex、WaitGroup、Once、Cond、Pool和Map等。Mutex通过复合状态位和信号量实现高效互斥锁,支持正常和饥饿两种模式;RWMutex实现读写分离;WaitGroup用于协程同步;Once确保单次执行;Cond实现条件变量通知;Pool管理对象复用;Map提供线程安全键值存储。这些组件通过原子操作、自旋优化和内存屏障等技术,有效解决了数据竞争、死锁等问题,适用于计数器、缓存系统、生产者-消费者模型等多种并发场景。开发

2026-03-11 14:58:02 459

原创 Mysql乐观锁与悲观锁详解

本文对比分析了乐观锁与悲观锁两种并发控制机制。悲观锁通过SELECT...FOR UPDATE实现,适用于写操作频繁场景,保证强一致性但性能较差;乐观锁通过版本号字段实现,适用于读多写少场景,性能高但需处理冲突。文章结合Gin+GORM框架提供了两种锁的具体实现示例,并给出选型建议:资金类业务用悲观锁,高并发场景用乐观锁或Redis+MQ方案。最后详细介绍了Redis预减库存+消息队列的秒杀系统架构,通过Lua脚本原子操作、异步落库和对账机制解决高并发下的库存一致性问题。

2026-02-28 09:54:32 1077

原创 Mysql 几种主从复制方式以及使用docker搭建主从复制架构&gin框架项目实践

本文介绍了MySQL主从复制的几种方式及在Go Gin框架中的实践应用。主要内容包括: MySQL主从复制方式: 异步复制(默认):性能好但可能丢失数据 半同步复制:提高数据安全性但性能略降 同步复制:金融级强一致性 GTID复制:推荐方式,简化管理 基于位点的传统复制 Gin框架实践: 实现读写分离中间件 基于HTTP方法自动路由(写操作走主库,读操作走从库) 数据库连接池配置和健康检查 分层架构设计(Repository-Service-Handler) 提供强制主库查询功能 完整实现: Docker搭

2026-02-26 16:18:20 728

原创 多个项目功能代码大部分相同,合并代码使用一个代码仓库,实现“一次开发、多项目复用”,同时保留各自特有的功能 架构设计

本文提出了一种基于Go语言build tags机制的后台系统代码合并方案,旨在统一柬埔寨和泰国两个高度相似项目的后台代码。通过分析两个项目的目录结构差异,采用单仓库+多服务+Build Tags的架构设计,将公共代码放在无tag文件中,特有功能通过//go:build标签隔离。方案详细说明了控制器、模型、路由注册、服务配置等模块的具体实现方法,包括配置文件的层级覆盖策略和本地开发调试的自动化脚本。该方案实现了 一次开发、多项目复用 的目标,同时保留项目特有功能,为未来新增国家支持提供了扩展性

2026-01-06 10:25:11 964

原创 项目访问接口时报“MISCONF Redis is configured to save RDB snapshots, ...“错误的解决方案

项目访问接口时报"MISCONF Redis is configured to save RDB snapshots, ..."错误的解决方案: Redis 的持久化机制触发了保护机制, redis磁盘满了

2025-12-25 14:26:44 631

原创 ClickHouse版从22升级到24, 跨库表关联出现Compound identifier ‘xx.xx‘ cannot be resolved as table expression解决方案详解

ClickHouse版从22升级到24, 跨库表关联出现Compound identifier ‘xx.xx‘ cannot be resolved as table expression解决方案详解

2025-08-15 16:23:26 570

原创 ClickHouse从22版本升级到24版本,通过%Y-%m-%d %H:%M:%S进行时间转换查询时, 返回时间格式差异中分钟数为英文月份(2025-05-01 01:May:00)的解决方案详解

ClickHouse从22版本升级到24版本,通过%Y-%m-%d %H:%M:%S进行时间转换查询时, 返回时间格式差异中分钟数为英文月份(2025-05-01 01:May:00)的解决方案详解

2025-08-11 17:04:23 1222

原创 golang实现支持100万个并发连接(例如,HTTP长连接或WebSocket连接)系统架构设计详解

golang实现支持100万个并发连接(例如,HTTP长连接或WebSocket连接)系统架构设计详解

2025-08-05 22:57:52 1184

原创 结合Golang语言说明对多线程编程以及 select/epoll等网络模型的使用

首先介绍select和epoll这两个I/O多路复用的网络模型,然后介绍多线程编程,最后结合Go语言项目举例说明如何应用

2025-07-27 19:54:23 951

原创 mysql 以及clickhouse 的sql语句where条件中 SpinType IN (‘Normal‘) 与SpinType = ‘Normal‘ 哪个查询效率高些讲解

mysql 以及clickhouse 的sql语句where条件中 SpinType IN ('Normal') 与SpinType = 'Normal' 哪个查询效率高些讲解

2025-07-27 19:15:42 592

原创 golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解

golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解使用Golang,以Gin框架为基础,设计一个能够处理每秒100万请求(QPS 1M)的系统架构注意:100万QPS是一个很高的数字,单机通常难以处理,所以必须采用分布式架构,并且需要多层次的架构设计和优化

2025-07-25 22:50:07 1248 5

原创 Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解

Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解

2025-07-24 22:56:09 1422

原创 关于SaaS业务模式及其系统架构构建的详细解析

关于SaaS业务模式及其系统架构构建的详细解析:通过互联网(通常是云平台)以​​订阅​​方式向客户提供软件应用服务

2025-07-16 21:58:18 1485

原创 Http1,Http2与Https区别和联系

本文详细解析了HTTP协议及其演进版本的核心特性。HTTP1作为基础协议具有无连接、无状态特性,通过Cookie/Session/Token等应用层方案实现状态管理,但存在明文传输缺陷。HTTP2通过二进制分帧、多路复用、头部压缩等技术大幅提升性能,保持语义不变。HTTPS则在HTTP基础上加入TLS/SSL加密层,实现数据加密、身份验证和完整性保护。三者形成技术演进链条:HTTP1奠定基础架构,HTTP2优化性能,HTTPS保障安全。实际应用中需根据场景选择协议组合,如敏感数据必须采用HTTPS,状态管理

2025-07-13 23:01:22 2777 4

原创 使用git进行代码版本管理时,取消某次合并

使用git进行代码版本管理时,取消某次合并详解

2025-05-30 17:55:27 861

原创 ClickHouse进行LEFT JOIN 关联查询时, 关联键的数据类型不一致,导致报错 的解决方案详解

ClickHouse进行LEFT JOIN 关联查询时, 关联键的数据类型不一致,导致报错 的解决方案详解common type for joined columns: UserId: UInt64 at left, bupb.UserId: Int64 at right. There is no supertype for types UInt64, Int64

2025-04-22 09:46:35 1346

原创 golang操作ClickHouse在使用Select关键字进行查询时,并使用toString, round函数计算百分比并将结果转换为字符串并附加百分号时,出现NAN%的解决方案详解

golang操作ClickHouse在使用Select关键字进行查询时,并使用toString, round函数计算百分比并将结果转换为字符串并附加百分号时,出现NAN%的解决方案详解

2025-04-15 10:20:57 1302

原创 golang通过STMP协议发送邮件功能详细操作

在 Go 语言中接入 IMAP 和 SMTP 服务来进行邮件的发送和接收操作,可以通过使用一些现有的第三方库来简化操作,常见的库有 go-imap 和 gomail,它们可以帮助我们连接和操作 IMAP 邮箱(读取邮件)以及通过 SMTP 发送邮件

2025-04-11 18:23:19 1025

原创 golang中使用ClickHouse查询,报错:Column goods_name is not under aggregate function and not in GROUP BY 解决办法

golang中使用ClickHouse查询,报错:Column goods_name is not under aggregate function and not in GROUP BY 解决办法

2025-04-11 18:06:09 721

原创 golang通过飞书邮件服务API发送邮件功能详解

​需要实现通过飞书邮件服务API发送邮件验证码功能:用户输入邮箱, 点击发送邮件,然后发送邮件验证码, 这里验证码有过期时间, 保存到redis缓存中​

2025-04-08 17:53:34 920

原创 ClickHouse查询涉及到多个分布式表,出现错误:DB::Exception: Double-distributed IN/JOIN subqueries is denied分析以及解决办法

ClickHouse查询涉及到多个分布式表,出现错误:DB::Exception: Double-distributed IN/JOIN subqueries is denied分析以及解决办法

2025-02-28 17:56:51 858

原创 Apifox 关于自动设置授权Authorization 的操作步骤详解

在现代软件开发中,API(应用程序编程接口)已成为不同系统、服务和应用程序之间交互的基本构建块。随着互联网应用的普及,安全性逐渐成为开发者和用户关注的重点。为了确保数据的安全和用户的隐私,许多 API 采用了 Authorization 头进行身份验证。这一机制允许服务器验证客户端请求的来源,确保只有经过授权的用户才能访问敏感数据和操作

2025-02-25 15:05:06 2584

原创 golang时间相关函数总结

golang时间相关函数总结: 获取近x日的开始结束时间戳, 获取起止日期时间戳,计算当前时间到24点的秒数,获取当前时间戳,日期转换成时间戳,时间戳转换成日期函数

2025-02-20 14:44:27 510

原创 当使用go mod tidy更新pkg包时,某个包却不是最新的 解决办法

当使用go mod tidy更新pkg包时,某个包却不是最新的 解决办法

2025-02-06 14:14:56 782

原创 linux环境自动化golang项目启动脚本解析

当在本地创建了golang项目,修改了代码功能,怎么在远程测试服务器上更新该功能呢,可以使用下面的步骤来解决该问题(这只是其中一种方法):(1).推送最新代码到远程仓库(2).在测试服务器上创建该项目并拉取最新代码(3).创建deploy.sh脚本(4).运行deploy.sh脚本

2025-02-05 13:55:08 1224

原创 golang通过AutoMigrate方法自动创建table详解

在 Go 语言中,GORM支持Migration特性,支持根据Go Struct结构自动生成对应的表结构,使用 GORM ORM 库的 AutoMigrate 方法可以自动创建数据库表,确保数据库结构与定义的模型结构一致。AutoMigrate 方法非常方便,特别适合在开发阶段进行快速迭代注意: AutoMigrate 会创建表、缺失的外键、约束、列和索引出于保护数据的目的,它 不会 删除未使用的列AutoMigrate 会自动创建数据库外键约束,可以在初始化时禁用此功能

2025-01-27 16:46:47 2356 1

原创 通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签

通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签

2025-01-27 14:46:56 1628

原创 protobuf中oneof的使用

protobuf中oneof关键字的使用详解以及案例

2025-01-27 14:23:39 1386

原创 golang请求云数据库ClickHouse数据库报错:err code: 202, message: Too many simultaneous queries. Maximum: 100

开发环境:语言: golang1.22数据库引擎: GORM数据库: ClickHouse场景:当使用sync.WaitGroup并发执行多个gorm相关的goroutine时,报错:err code: 202, message: Too many simultaneous queries. Maximum: 100

2025-01-17 16:14:02 673

原创 DBeaver Ultimate24.0数据库图形化管理工具工具连接各类数据库

DBeaver Ultimate 是一款强大的数据库管理工具,支持多种数据库的连接与管理,包括但不限于 MySQL、PostgreSQL、Oracle、SQL Server、SQLite 、Redis、ClickHouse、MongoDB、ODBC、CouchBase、Kafka、ElasticSearch、Neo4j等。以下是 DBeaver Ultimate 24.0 的一些主要特点和功能

2025-01-13 09:58:36 953 1

原创 vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

vscode设置调试launch.json

2025-01-10 14:01:58 3062

原创 github.com/samber/lo 库使用案例讲解

samber/lo是一个 Go 语言的库,提供了一组函数式编程风格的工具函数,旨在简化集合(如切片、映射等)的操作。这个库的灵感来自于 JavaScript 的 Lodash 库,因此它的 API 和使用方式与 Lodash 类似。以下是对samber/lo包的一些详细介绍,包括其功能、常用函数和示例。

2025-01-08 16:05:40 998

原创 使用swag init --parseDependency生成api文档报错解决办法

golang使用swag生成api文档报错解决办法

2024-09-29 17:10:34 866

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除