自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

笔记

我有一只叫胖达的猫

  • 博客(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

原创 深拷贝赋值运算符的使用,以及拷贝构造函数、赋值运算法的使用

【代码】深拷贝赋值运算符的使用,以及拷贝构造函数、赋值运算法的使用。

2025-03-22 00:15:07 111

转载 突破性能瓶颈: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

原创 微信小程序如何使用decimal计算金额

之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确。

2025-02-08 12:44:14 592

原创 //go:embed 导入不同目录的配置文件

【代码】//go:embed 导入不同目录的配置文件。

2025-01-15 13:51:20 221

转载 go语言time.After()的作用

time.After是一个非常实用的函数,它返回一个用于读取的单向通道(

2025-01-10 09:07:07 134

转载 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

转载 C++ 项目目录结构

【代码】C++ 项目目录结构。

2024-11-10 20:36:28 366

转载 事件分发器 & 事件过滤器

在 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

php常用函数

都是一些PHP常用的函数、都是一些基础的。

2013-04-12

《阿里巴巴 Java 开发手册》,包含mysql,java规范约束等。

包含mysql规范,java规范约束,并发处理,异常处理等等

2017-02-13

汽车之家车型数据库带logo

2018/12/03号重新采集的汽车之家车薪数据,带车型logo、数据库带车型logo、数据库带车型logo、数据库带车型logo、数据库

2018-12-03

golang图片爬虫源码

golang爬虫源码,支持图片列表以及单页面图片爬取,对于初学者有参考意义。该版本支持采集列表规则,页码{{n}}为变量 如:《https://www.58pic.com/collect/fav-{{n}}.html》 其中n为页码,起始页码一般默认为1 ###########################################: 命令列表: 1、设置采集前缀 如:https://www.58pic.com/collect/fav- 2、设置采集后缀 如:.html,根据实际情况设置,默认为空 3、设置起始页码 如:1,默认值为1 4、设置最大页码 如:999,根据需要采集的页面列

2020-11-23

2018汽车之家汽车品牌车型数据新鲜出炉

项目需要,用python刚爬的汽车之家的汽车品牌、车型数据内含品牌logo以及车型图片。数据库带车型logo、数据库带车型logo、数据库

2018-06-07

胖达图片采集器v0.1.exe

胖达图片采集器v0.1 该版本支持采集列表规则,页码{{n}}为变量 如:《https://www.58pic.com/collect/fav-{{n}}.html》 其中n为页码,起始页码一般默认为1 ###########################################: 命令列表: 1、设置采集前缀 如:https://www.58pic.com/collect/fav- 2、设置采集后缀 如:.html,根据实际情况设置,默认为空 3、设置起始页码 如:1,默认值为1 4、设置最大页码 如:999,根据需要采集的页面列表采集设置默认为999 5、设置最大线程数默认8

2020-10-15

简易IIS服务器,ASP源码测试利器

简易IIS服务器,ASP源码测试利器,直接放在ASP源码里面,双击即可打开ASP源码的网站。

2014-09-07

ASP写得单号网源码

ASP写得单号网源码 ,快递单号网源码,源码里面带说明文档

2014-09-07

空空如也

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

TA关注的人

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