- 博客(25)
- 收藏
- 关注
原创 Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)
本文系统讲解了从零构建高性能事件总线(EventBus)的完整方案。首先介绍事件总线作为Pub/Sub机制的解耦优势,然后详细展示本地实现核心结构(事件注册、同步发布),并延伸讲解异步处理、通用接口封装等关键设计。文章重点剖析网络扩展方案,包括TCP/HTTP通信协议、跨服务事件传递及中间件机制(日志/鉴权/限流);还涵盖注册中心、延迟事件调度、链路追踪等高级特性。通过分层架构设计,最终实现支持本机、网络及分布式场景的通用事件总线系统,为构建弹性微服务架构提供核心技术支撑。
2025-06-07 18:22:19
755
原创 Go语言事件总线EventBus本地事件总线系统的完整实现框架
基本概念:EventBus是一种设计模式,它充当一个中央集散地,负责在事件的发布者和订阅者之间进行消息的传递。在Go语言中,通过使用EventBus库,开发者可以轻松地实现事件的发布、订阅和处理。当某个事件发生时,发布者将事件发送到EventBus,EventBus根据事件的类型或主题,将事件通知给所有订阅了该事件的订阅者,订阅者接收到事件后执行相应的处理逻辑。主要功能:提供了事件的发布与订阅功能,使得组件之间可以通过事件进行通信,而无需直接调用彼此的方法。
2025-05-31 16:27:04
1023
3
原创 Go 语言学习 Protobuf 连接 gRPC 实现 AI 接口
本文介绍了使用Protobuf和gRPC实现AI接口的技术方案。首先讲解了Protobuf的安装与使用,包括.proto文件定义和Go代码生成;其次介绍了gRPC基础,包含服务端和客户端的实现方法;最后展示了如何将AI模型封装为gRPC服务,并提出了负载均衡、缓存机制等优化措施。该方案结合Go语言的高性能特性、Protobuf的高效序列化和gRPC的低延迟通信优势,能够构建高效、可扩展的AI接口,支持跨语言集成,为AI应用开发提供了可靠的技术基础。
2025-05-25 08:54:01
680
原创 Gorm框架进阶
很形象的一个例子,张三给李四转账100元,在程序里面,张三的余额就要-100,李四的余额就要+100 整个事件是一个整体,哪一步错了,整个事件都是失败的。事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。但是,如果返回数据给前端,前端接收到的状态就是数字,不过问题不大,前端反正都要搞字符映射的。
2025-05-18 16:16:08
832
原创 Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
Protobuf(Protocol Buffers)是一种高效、跨平台的结构化数据存储格式,以二进制形式存储,占用空间小,但可读性较差。它的性能和效率优于JSON和XML,广泛应用于通信协议和数据存储领域。gRPC是Google开发的高性能、跨语言的RPC框架,使用Protobuf定义服务。要使用Protobuf,需从其官方GitHub下载并安装protoc工具,并配置系统环境变量。此外,还需安装protoc-gen-go和protoc-gen-go-grpc两个Go插件,用于生成Go代码。编写.proto
2025-05-11 09:06:30
1169
原创 MySQL完整版进阶及附录
MySQL体系结构:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。默认存储引擎是InnoDB。相关操作:-- 查询建表语句show create table account;-- 建表时指定存储引擎CREATE TABLE 表名( ...) ENGINE=INNODB;-- 查看当前数据库支持的存储引擎show engines;
2025-04-20 10:52:09
385
原创 算法之并查集
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些的问题。它管理一系列当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用。。这其实是一个很有现实意义的问题。我们可以建立模型,把所有人划分到若干个不相交的集合中,每个集合里的人彼此是亲戚。为了判断两个人是否为亲戚,只需看它们是否属于同一个集合即可。因此,这里就可以考虑用并查集进行维护了。
2025-04-13 10:20:16
1050
原创 MySQL完整版基础
查询所有数据库:查询当前数据库:创建数据库:CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];删除数据库:DROP DATABASE [ IF EXISTS ] 数据库名;使用数据库:USE 数据库名;注意事项UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
2025-04-05 15:57:13
651
原创 Gorm基础文档
模型是标准的 struct,由 Go 的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成定义一张表ID uint // 默认使用ID作为主键Email *string // 使用指针是为了存空值常识:小写属性是不会生成字段的自动生成表结构// 可以放多个的逻辑是只新增,不删除,不修改(大小会修改)例如将Name修改为Name1,进行迁移,会多出一个name1的字段生成的表结构如下默认的类型太大了修改大小我们可以使用gorm的标签进行修改有两种方式字段标签。
2025-03-30 09:58:08
468
原创 Gin框架
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。Gin是一个非常受欢迎的Golang Web框架,在GitHub上已经有47k的星星,它和Golang的语法一样简洁明了,使得初学者得以迅速入门。不是标准也不是协议。当验证不通过时,会给出错误的信息,但是原始的错误信息不太友好,不利于用户查看。
2025-03-22 13:38:00
682
原创 go Web进阶
如果希望调用自定义函数,需要借助html/template包下的FuncMap进行映射FuncMap本质就是map的别名type FuncMap map[string]interface{}函数被添加映射后,只能通过函数在FuncMap中的key调用函数代码实现main代码import ("net/http""time"html代码。
2025-03-16 11:27:37
1107
原创 Go Web基础
Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据Http报文(message)组成部分请求行(request-line)请求头(head)请求体(body)响应头响应体HTTP1.1实现了多种请求方式GET:向服务器请求资源地址HEAD:只要响应头POST:直接返回请求内容PUT:创建资源DELETE:删除资源TRACE:返回请求本身。
2025-03-09 09:11:46
1004
原创 超详细数据结构
一、绪论1.1、数据结构的研究内容1.数据的各种逻辑结构和物理结构,以及他们之间的相应关系2.对每种结构定义相适应的各种运算3.设计出相应的算法4.分析算法的效率1.2、基本概念和术语1.2.1、数据、数据结构、数据项和数据对象根据例子理解:假设有两张表,上表为人员表,下表为课程表, 表的格式如下:姓名性别身高课程代号小明男180A小红女180A小绿男180B课程代号课程名A语文B数学这两张表就是数据而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象而每张表
2025-02-16 11:28:57
450
原创 史上最全!!!MySQL全方位最细笔记
对于那些是主键或者具有UNIQUE约束的列或者列组合来说,如果表中已存在的记录中没有与待插入记录在这些列或者列组合上重复的值,那么就把待插入记录插到表中,否则更新那条重复的记录中某些列的值。• 在BEFORE触发器中,我们可以使用SET NEW.列名 = 某个值的形式来更改待插入记录或者待更新记录的某个列的值,但是这种操作不能在AFTER触发器中使用,因为在执行AFTER触发器的内容时记录已经被插入完成或者更新完成了。驱动表中的记录在被驱动表中找不到匹配的记录,该记录不会加入到最后的结果集。
2025-02-08 19:44:18
936
原创 Linux进阶中的两个常用命令
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效。之所以叫 awk 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
2025-01-16 14:21:51
817
原创 Linux重点
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。连 vim 的官方网站 (https://www.vim.org/) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
2024-12-07 15:48:20
1197
原创 Linux的Tree,Yum和Other命令
L level 限制目录显示层级-C 在文件和目录清单加上色彩,便于区分各种类型-p 列出权限标示。
2024-12-01 14:46:03
961
原创 Win11设置Linux虚拟机配置静态IP地址
先查看虚拟机的两个WIFI是否已启用,然后点击VMnet8的编辑接着点击Internet协议版本4(TCP/IPv4),双击或者点击右下边的属性。首先点击使用下面的IP地址,然后再IP地址处输入192.168.136.1,在点击子网掩码后面的输入框后,会自动生成255.255.255.0,这个不用对其进行更改,最后点击确定就可以了。
2024-11-23 09:08:52
773
1
原创 Channel(通道)
并发是指程序同时执行多个任务的能力Go 语言支持并发,通过 goroutines 和 channels 提供了一种简洁且高效的方式来实现并发。
2024-10-26 10:52:23
841
原创 go语言使用栈和队列实现计算器
逻辑十分简单,主要注意的是类型间的转化,要从空接口类型断言为string类型,再将string类型转化为int类型进行计算,使用float类型也可以实现小数计算,可以自己去尝试。上文只实现了正整数之间的加减乘除和小括号的运算,图方便未考虑其他可左右运算顺序的符号如:[]中括号 {}大括号 %取余,除此之外还可以尝试一下实现输入负数时处理的方法。,这种类型的表达式也被称为中缀表达式,我们很容易理解它的运算顺序。如果元素为数字,则直接入栈,若元素为运算符,则从栈中弹出两个数字进行运算,再将运算结果放入栈中。
2024-10-10 11:07:00
727
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人