- 博客(1089)
- 资源 (11)
- 收藏
- 关注
转载 Go 开源项目:Coze Studio 一站式 AI Agent 架构设计分析报告
CozeStudio是一个基于领域驱动设计(DDD)的一站式AIAgent开发平台,采用微服务架构和分层设计。系统包含表现层(React+TypeScript前端)、API层、应用层、领域层和基础设施层,通过清晰的领域划分(如Agent、Conversation等)实现业务解耦。项目通过契约模式抽象外部资源依赖,支持插件化扩展和事件驱动设计,并使用Thrift RPC和RocketMQ实现服务通信。容器化部署和监控系统保障了运维效率。该架构通过分层设计、资源抽象和事件驱动等现代化设计思想,实现了高内聚、低耦
2025-07-28 10:17:49
41
转载 Golang sse的实现
本文介绍了Go语言实现SSE(Server-Sent Events)流式输出技术的核心方法。SSE是一种基于HTTP的单向数据流技术,通过设置Content-Type:text/event-stream头部实现服务器向客户端的实时推送。文章详细讲解了SSE的HTTP头部配置、事件格式化、连接保持机制,以及使用上下文和通道管理连接生命周期的方法。同时提供了完整的Go实现示例,包括流式输出处理和转发大模型输出的demo代码。通过标准库net/http或Gin等框架,开发者可以轻松实现SSE功能,适用于需要实时更
2025-07-26 11:07:23
34
转载 Milvus快速入门(常用demo)
本文介绍了开源向量数据库Milvus的基本概念、安装配置及使用示例。Milvus专为大规模AI应用设计,支持高效的向量存储、索引和检索,具有高性能、高可用、云原生等特点。文章详细讲解了通过Docker安装Milvus的步骤,并展示了Python示例脚本,包括创建集合、插入数据、构建索引、执行向量/标量/混合查询等核心操作。同时介绍了Attu可视化工具的两种安装方式。Milvus适用于图像搜索、文本匹配、语音识别、推荐系统等场景,通过优化索引算法和分布式架构实现亚秒级检索性能。
2025-07-25 11:26:53
24
转载 什么是 Langchain 及其核心概念
LangChain是一个开源框架,旨在将大型语言模型(如GPT-4)与外部数据源和计算资源连接起来。它通过三大核心组件(组件、链和代理)实现功能扩展,使语言模型不仅能处理文本,还能执行API调用等操作。LangChain支持数据连接、动态查询生成和特定任务执行,适用于个人助手、学习辅助和数据分析等多种场景。其工作流程包括问题向量化、相似性搜索和信息整合,最终生成答案或执行操作。该框架为AI应用开发提供了更灵活、个性化的解决方案。
2025-07-24 10:57:00
59
原创 sync.Pool的demo
摘要:本文演示了如何使用Go的sync.Pool来减少堆内存分配。通过User对象池示例,展示了如何获取和重置对象,避免重复创建新实例。代码中创建了UserPool,通过Get()获取对象后调用Reset()方法重置状态,再通过Put()放回池中。循环测试显示部分请求复用池中对象而非新建,有效减少了内存分配次数。重点在于减少new操作而非复用对象值,符合sync.Pool的设计初衷。
2025-07-23 11:08:11
180
原创 golang sync.Pool的作用
sync.Pool 是 Go 语言中用于临时对象复用的并发安全池,核心价值在于减少内存分配和 GC 压力。它适用于短期存储可复用对象(如缓冲区、临时结构体),通过复用对象减少频繁 new/make 操作。使用时需注意:对象可能被 GC 回收,不能用于长期存储;使用前需重置状态,使用后需及时 Put 回池;适合高频创建/销毁场景,如 HTTP 请求处理、编解码等。典型应用包括字节缓冲区复用、临时对象池等,能显著降低内存分配次数和 GC 触发频率,但需避免存放带状态或需持久化的资源。
2025-07-23 10:20:07
707
原创 pgloader 把mysql数据库转成pg数据库
摘要:本文介绍使用pgloader工具从MySQL迁移数据到PostgreSQL的方法。首先创建change.load文件,内容包含数据库连接信息和迁移参数:源为MySQL的localhost:3306/demo数据库,目标为PostgreSQL的192.168.2.215:5432/demo数据库。迁移选项包括删除目标表、创建新表、建立索引、重置序列,并发数设为6。执行命令"pgloader change.load"即可启动迁移。
2025-07-21 19:40:03
167
转载 etcdctl常用命令
本文介绍了etcdctl常用命令操作,包括获取键值对、删除键值、创建键值、成员管理及数据备份恢复等。通过get命令可获取单个键或所有键值,del支持删除指定键或前缀匹配的键。创建键时put会覆盖已有键,而mk仅在键不存在时创建。此外,还涉及集群成员列表查看、配置更新以及快照备份恢复功能。这些命令为etcd数据库管理提供了基础操作指南。
2025-07-16 14:12:47
31
转载 Go操作Kafka之kafka-go
Go社区中目前有三个比较常用的kafka客户端库 , 它们各有特点。首先是IBM/saram(这个库已经由Shopify转给了IBM),之前我写过一篇使用sarama操作Kafka的教程,相较于sarama, kafka-go 更简单、更易用。segmentio/kafka-go 是纯Go实现,提供了与kafka交互的低级别和高级别两套API,同时也支持Context。
2025-07-16 09:23:54
51
转载 go-elasticsearch 使用指南
本文是 go-elasticsearch 库的使用指南。go-elasticsearch是Elasticsearch 官方提供的 Go 客户端。每个 Elasticsearch 版本会有一个对应的 go-elasticsearch 版本。官方会维护最近的两个主要版本。go-elasticsearch 提供了 Low-level 和 Fully-typed 两套API。本文以 Fully-typed API 为例介绍 go-elasticsearch 的常用方法。
2025-07-16 09:21:03
33
转载 使用 go-redis 执行 Lua 脚本
Redis 是开发中常用的高性能缓存数据库。除了常规的 GET/SET 操作,Redis 还支持通过 Lua 脚本实现复杂的原子操作。本文将带你循序渐进地学习如何在 Go 语言中,利用 go-redis 执行 Lua 脚本,并进一步讲解脚本缓存(script load)与 Go 的 embed 特性的结合使用。在日常的 Go 项目开发中,Redis 无疑是我们最常用的缓存和数据存储中间件之一。它性能强大,数据结构丰富。然而,在一些复杂的业务场景下,我们可能需要执行多个 Redis 命令,并期望这些操作能
2025-07-16 09:13:42
26
转载 一文讲清:数据库和缓存的数据一致性
摘要:Redis作为MySQL的缓存能提升性能,但数据更新时需保证一致性。常见方案是先更新数据库再更新缓存或反之,但都存在并发问题导致数据不一致。CacheAside策略建议删除而非更新缓存,读取时再重建。其中"先更新数据库再删除缓存"方案成功率较高。为保障操作成功,可引入消息队列重试机制或订阅MySQL binlog(如Canal中间件)异步处理缓存删除,后者能避免代码入侵。两种方案都通过异步操作确保最终一致性。(149字)
2025-07-15 13:38:56
25
转载 C++/Qt 开发经验总结:从继承多态到数据库优化
本文总结了C++/Qt开发中的实用技巧: C++继承与多态:正确使用virtual和override关键字实现多态,区分覆盖与重写; Qt控件优化:实现QTableView悬停整行选中效果; 跨平台开发:使用.pro文件条件编译适配不同平台; 数据库优化:避免全表扫描的查询技巧; 版本兼容处理:通过条件编译解决Qt版本差异。 还包含Qt信号槽冲突解决、图片缩放策略、头文件static使用陷阱、图表边距优化和数据压缩传输等内容,涵盖开发中的常见问题解决方案。
2025-06-17 14:46:13
45
原创 gRPC 的四种通信模式完整示例
gRPC主要提供四种通信模式:1)简单RPC(单一请求/响应);2)服务端流式(单请求/多响应);3)客户端流式(多请求/单响应);4)双向流式(实时双向消息)。摘要包含各模式的.proto定义、Go实现示例及适用场景:简单RPC适合常规API调用,流式模式适用于实时数据推送、批量处理等场景。通过protobuf定义接口,自动生成代码简化开发。项目结构清晰,包含proto文件、服务端/客户端实现以及编译运行步骤。这些模式可组合使用构建复杂分布式系统。
2025-06-07 16:17:03
396
转载 WebSocket、HTTP/2 与 gRPC
本文介绍了三种现代网络通信协议:WebSocket、HTTP/2和gRPC。WebSocket通过HTTP握手建立双向通信,适合实时应用;HTTP/2采用二进制协议和多路复用提升性能,支持服务器推送;gRPC基于HTTP/2和Protobuf,适合微服务等高性能场景。文章对比了三者在加密、消息推送等方面的差异,并提供了JavaScript和Python的API示例。WebSocket适合双向通信,HTTP/2+SSE适合实时数据展示,而gRPC在非浏览器环境中表现优异。
2025-06-07 15:54:32
104
原创 支持中引文,golang返回指定长度的字符串
不管是中文字符(UTF-8 中通常占 3 个字节)还是英文字符(UTF-8 中占 1 个字节),每个字符都被视为一个 rune。该函数使用 utf8.DecodeRuneInString(s) 对字符串按 UTF-8 编码逐字符解码。它通过计数 count 来控制跳过前 n 个字符,然后返回剩余字符串,不会因为字符编码长度不同而出现问题。
2025-06-07 09:47:05
265
原创 atomic.Value与sync.map有什么区?
atomic.Value 和 sync.Map 是 Go 中两种用于并发安全操作共享数据的机制,但它们的设计目标、使用场景和底层实现有明显区别。下面从多个维度进行对比,并结合你的项目 [config_pool.go]使用场景说明。
2025-05-27 13:52:38
872
原创 atomic.Value 中存储的数据是否会被 GC
本文展示了一个使用Go语言实现的配置缓存池(ConfigPool)。该实现包含以下核心功能:1. 使用atomic.Value存储配置数据的线程安全缓存;2. 定时自动刷新机制(5-15秒随机间隔);3. 提供按ID查询和分页查询接口;4. 通过接口设计支持DAO层模拟和依赖注入。关于内存管理,只要ConfigPool实例存在,atomic.Value中存储的配置数据就不会被GC回收。该设计适合需要定期从数据库加载并缓存配置数据的场景,通过原子操作保证并发安全,同时保持缓存数据的实时性。文中还提供了完整的测
2025-05-27 11:39:03
177
原创 利用反射,指定方法与入参,调用不同的方法
摘要:本文展示了一个Go语言实现的通用服务调用方法,能够处理包含结构体参数的JSON数据。代码定义了一个MyService结构体,其中ProcessUser方法接收用户参数。Service方法利用反射机制动态调用指定方法,并自动将JSON字符串反序列化为目标结构体类型。示例演示了如何传递JSON字符串作为结构体参数进行方法调用,实现了灵活的参数处理和数据转换功能。
2025-05-27 11:26:50
115
原创 golang 定时器
文章展示了两种使用Go语言实现定时器的写法。第一种写法使用time.Tick创建定时器,通过select语句监听定时器事件,并在达到指定次数后停止。第二种写法使用time.NewTicker创建定时器,并通过ticker.Stop()方法显式停止定时器。两种写法均通过sync.WaitGroup确保协程同步,并在达到条件后输出结果。第二种写法在调试时出现警告,提示Go版本过旧。两种写法均能实现定时器功能,但第二种写法更显式地管理定时器资源。
2025-05-13 11:04:33
377
原创 go mod 说明
/ 替换为具体版本,比如替换为本地版本,公司私有仓库等,可以统一某个库的版本 git.apache.org/thrift.git => xxx.yyy.demo.com/xxyu/thrift v0.9.4。//后缀有// indirect 表示为间接引用 github.com/go-errors/errors v1.5.1 // indirect。// 项目直接引用 github.com/gin-gonic/gin v1.8.1。go 1.16 //要求的最小版本,具体依实际编译为准。
2025-05-06 16:05:17
237
转载 突破性能瓶颈:Go语言实现电商系统千万级数据分库分表实战
随着业务规模的不断扩大,单一数据库的性能瓶颈日益凸显。当数据量达到一定规模,单表数据量过大或单库负载过高时,数据库的读写性能会显著下降,甚至可能导致系统不可用。分库分表技术作为解决这一问题的有效手段,已成为大型系统架构中不可或缺的一部分。本文从电商系统业务实战场景出发,以GoFrame框架和MySQL数据库为例,详细介绍针对业务数据库分库分表的设计思路和具体实现方法,帮助开发者轻松应对大数据量挑战。
2025-03-20 09:08:40
91
转载 Go 事件驱动架构:从原理到实战,彻底掌握高并发编程
小规模项目:使用 Channel 实现简单的事件驱动。中等规模项目:采用自定义事件总线(如 sync.Map 实现的发布/订阅模式)。大规模分布式项目:使用 Kafka、RabbitMQ 作为事件总线,实现跨服务事件驱动。事件驱动架构不仅提升了系统的响应速度,也让业务逻辑更加解耦。如果你的 Go 项目需要高并发支持,不妨尝试事件驱动架构!
2025-03-18 21:12:16
82
原创 quillEditor 禁用复制粘贴图片,以及class转style等问题
【代码】quillEditor 禁用复制粘贴图片,以及class转style等问题。
2025-03-04 21:37:17
387
转载 Go 语言微服务框架 Kratos 集成第三方库 kafka-go 操作消息队列 Kafka
Go 语言微服务框架 Kratos 不限制使用任何第三方库,Go 语言操作消息队列 Kafka 有很多优秀的第三方库,比如 sarama 和 kafka-go,我们在之前的文章中介绍过 Go 语言怎么使用 sarama 操作消息队列 Kafka。本文我们介绍 Go 微服务框架 Kratos 怎么集成第三方库 kafka-go[1] 操作消息队列 Kafka。本文我们通过示例代码,介绍 Kratos 微服务框架怎么集成第三方库 kafka-go,操作 Kafka。方法中添加生产 Kafka 消息的代码。
2025-01-06 08:59:57
203
转载 gin参数验证
datetime: 日期格式验证,如:binding:“datetime=2006-01-02 15:04:05”,注:时间必须是2006年1月2号下午3点4分5秒,不可以修改年月日时分秒的值。例如:当业务系统对验证信息有特殊需求时,返回信息需要自定义,手机端返回的信息需要时中文,而pc端发挥返回的信息需要是英文,如何做到请求一个借口满足上述三种情况。对于切片,数组和映射,验证元素的数量。可以使用dive标签,这是告诉验证器深入到切片,数组或映射中,并使用元素标签来验证切片,数组或映射元素。
2025-01-06 00:12:17
207
转载 在批处理脚本中,%variable% 和 !variable! 的区别
命令在处理循环和嵌套命令时非常有用,特别是在你需要动态地访问和修改环境变量的值时。通过启用延迟环境变量扩展,你可以确保在循环体内正确地获取和显示环境变量的最新值。作者:book_02链接:https://www.jianshu.com/p/9cf26b0dd59a来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2025-01-02 09:26:01
150
转载 Golang中http包的具体使用
要管理HTTP客户端头域,重定向和其它策略,创建一个client:typestruct// Transport指定执行独立、单次HTTP请求的机制。// 如果Transport为nil,则使用DefaultTransport。// CheckRedirect指定处理重定向的策略。// 如果CheckRedirect不为nil,客户端会在执行重定向之前调用本函数字段。
2024-12-20 23:53:08
397
转载 Go语言中的条件变量:sync.NewCond(go版信号量)
在处理复杂的并发问题时,sync.NewCond是一个不可或缺的工具。在这个示例中,我们首先创建了一个条件变量cond,并将其与一个新的sync.Mutex关联。sync.NewCond函数用于创建一个新的条件变量,并将其与一个互斥锁(sync.Mutex或sync.RWMutex)关联。Go语言的sync包提供了一个强大的同步原语——条件变量(Cond),它允许我们等待或通知某个条件的变化。下面是一个使用sync.NewCond的示例,模拟了一个比赛场景,其中10个选手需要等待一个开始信号才能开始比赛。
2024-12-06 23:42:35
83
转载 关于QT中Query的bindValue函数mismatch问题
本来是以为参数个数或者类型不匹配导致的,但是反复检查,个数和类型都没问题。我之前没使用过bindValue这个函数,是直接使用的字符串模板替换,所以对bindValue这个函数的用法不太了解,刚开始我是这样使用的,如图所示。要么使用字符串模板替换的方法,这种的我觉得最实用,也不容易出错,需要注意的就是,如果字段是字符串类型,需要在字符串模板中加上’ ’字符,如下图所示。知道原因了,那就好找方法了,要么使用bindValue函数,但是里面的字符串中,表名和字段名都得固定好,或者使用参数传递,如图所示。
2024-11-14 23:40:32
216
转载 动图图解!收到RST,就一定会断开TCP连接吗?
我们都知道TCP正常情况下断开连接是用四次挥手,那是正常时候的优雅做法。但异常情况下,收发双方都不一定正常,连挥手这件事本身都可能做不到,所以就需要一个机制去强行关闭连接。RST就是用于这种情况,一般用来异常地关闭一个连接。它是一个TCP包头中的标志位。正常情况下,不管是发出,还是收到置了这个标志位的数据包,相应的内存、端口等连接资源都会被释放。从效果上来看就是TCP连接被关闭了。而接收到 RST的一方,一般会看到一个或的报错。TCP报头RST位RST其实是TCP包头里的一个标志位,目的是为了在。
2024-11-14 22:59:52
162
转载 为什么用公钥加密却不能用公钥解密?
第三和第四次握手的最后都有个Finished报文,里面是个摘要。摘要,说白了就是对一大段文本进行一次hash操作。目的是为了确认通信过程中数据没被篡改过。第三次握手,客户端生成摘要,服务端验证,如果验证通过,说明客户端生成的数据没被篡改过,服务端后面才能放心跟客户端通信。第四次握手,则是反过来,由服务端生成摘要,客户端来验证,验证通过了,说明服务端是可信任的。那么问题叒来了。为什么要hash一次而不是直接拿原文进行对比?这是因为原文内容过长,hash之后可以让数据变短。更短意味着更小的传输成本。
2024-11-14 22:55:18
213
转载 socket到底是什么?
• socket中文套接字,我理解为一套用于连接的数字。并不一定准确,欢迎评论。• sock在内核,socket_fd在用户空间,socket层介于内核和用户空间之间。• 在操作系统内核空间里,实现网络传输功能的结构是sock,基于不同的协议和应用场景,会被泛化为各种类型的xx_sock,它们结合硬件,共同实现了网络传输功能。
2024-11-14 22:48:55
193
转载 事件分发器 & 事件过滤器
在 Qt 中,事件分发器(Event Dispatcher) 是一个核心概念,用于处理 GUI 应用程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象,直到事件被处理或被取消。在 Qt 中,⼀个对象可能经常要查看或拦截另外⼀个对象的事件,如对话框想要拦截按键事件,不让别的组件接收到,或者修改按键的默认值等。如上图,事件分发器⽤于分发事件。1、在 “widget.h” 头⽂件中声明 ⿏标点击事件 和 事件分发器;8、在 “mylabel.cpp” ⽂件中实现⿏标点击事件和事件分发器;
2024-11-03 20:43:18
100
转载 C++11中auto与decltype的区别与联系深入解析
使用decltype(auto)时,编译器会根据表达式的类型推导出变量的类型,并保留该表达式的任何引用或cv(const和volatile)限定符。如果想让结果类型是 r 所指的类型,可以把 r 作为表达式的一部分,如r+0,显然这个表达式的结果将是一个具体值而非一个引用。加上括号的变量会被视为表达式,导致推导出的类型可能是引用类型。顶层const可以表示任意的对象是常量,底层const则于指针和引用等复合类型的基本类型部分有关,比较特殊的是指针,指针既可以是底层const,也可以是顶层const。
2024-11-01 12:27:51
74
golang图片爬虫源码
2020-11-23
2018汽车之家汽车品牌车型数据新鲜出炉
2018-06-07
胖达图片采集器v0.1.exe
2020-10-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人