自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GitHub CI/CD 全流程

本文详解GitHub CI/CD全流程:代码推送后,GitHub Actions自动执行测试与构建,后端推送镜像至GHCR,前端打包生成静态文件。通过提交SHA标记版本,确保可追溯。部署阶段通过SSH或OIDC通知服务器更新服务与页面,最后验证新版本可用性。强调CI(检查)与CD(部署)分离,需明确触发条件与权限配置,多仓库可独立部署,关键在于版本可控、部署可回滚,确保上线稳定可靠。

2026-10-17 15:57:02 253

原创 从本地到 HTTPS 上线:Docker 部署 Go 项目的完整流程(含 12 个真实踩坑)

本文以真实踩坑经历为引,系统讲解从本地Go项目到公网HTTPS上线的完整流程。核心要点:部署本质是显式化开发环境的隐式假设;关键步骤包括服务器选型、本地编译避免内存溢出、Docker镜像构建、Compose编排、数据迁移、域名与HTTPS配置;强调“小内存机器不编译”“分清必须与可省”等实战原则,附12个常见问题速查表,帮助开发者跨越“代码能跑”到“服务可访问”的鸿沟。

2026-09-19 15:08:01 366

原创 从单Agent到多Agent:多Agent到底是什么,以及一个完整项目应该怎么开发

多Agent系统并非简单叠加多个Agent,而是通过分工协作实现复杂任务的高效完成。单个Agent虽能调用工具,但面对复杂任务易陷入“全能却平庸”的困境。多Agent的核心在于:明确职责划分、设计合理协作机制(如串行、并行、主从模式)、结合固定流程与动态决策。开发前需先进行任务拆解与架构设计,避免盲目堆叠Agent。真正难点不在于“多”,而在于“可靠协作与状态管理”。

2026-09-19 09:39:05 103

原创 为什么你的点赞数会变成负数?——聊聊系统计数器的漂移、并发与校准

点赞数变负数源于计数器漂移,主因是并发“读-改-写”导致重复减1,或绕过逻辑的直接数据库操作。多个入口维护同一计数、种子数据未同步、批量删除未校准等,加剧误差积累。根本解法:用原子更新(如 UPDATE SET count = count - 1)、收敛维护入口、引入定时校准机制,确保冗余计数与真实数据一致。

2026-09-12 09:51:08 195

原创 为什么敏感词过滤不用正则?深度拆解 Trie + Normalize + Mask 敏感词模块

Normalize负责抹平各种干扰字符,Trie负责高效批量匹配敏感词,origIndex做位置映射,Mask布尔数组完成原文打星。工程开发中,不要一上来就堆最复杂的算法。这套Trie方案代码量不大,千级敏感词下性能足够,能覆盖绝大多数线上绕过场景。同时我们也要清醒认识字典匹配的局限性,语义类绕过很难单纯靠算法彻底根除,需要结合业务、人工审核一起配合。本篇代码基于Go实现,完整模块包含读写锁、热加载能力,适合博客、后台评论这类中小型后端项目直接参考。

2026-09-05 15:33:09 330

原创 提示词工程的基本原理与常用方法

提示词工程的核心原理与实践方法 摘要:提示词工程是通过优化输入内容来引导大语言模型准确完成任务的技术。其核心是将模糊的人类需求转化为模型可理解的具体指令。关键方法包括:明确任务目标、提供必要背景、规定输出格式、使用Zero-shot/Few-shot示例、合理设定角色等。好的提示词应包含完成任务所需的关键信息而非冗长规则,重点在于减少模型猜测。对于复杂任务建议分步处理,并通过建立评估标准验证提示词效果。提示词工程的价值在于提升模型输出的准确性和稳定性。

2026-08-22 19:51:56 172

原创 什么是 Claude Code Superpowers?从安装到实际使用,一篇彻底搞懂 AI 编程工作流

↓Skills↓软件开发方法↓需求分析↓设计↓计划↓编码↓测试↓Review↓验证Superpowers 不是一个让 AI “更会写代码”的模型,而是一套让 AI “更有流程地开发软件”的方法和 Skills。对于初学者来说,它最大的价值也许不是帮你少写几行代码。软件开发不是“想到什么就写什么”,而是先理解问题,再设计方案,最后通过编码、测试和 Review 把问题解决。“怎么让 AI 帮我写更多代码。“怎么让 AI 按照正确的软件工程方法,帮助我把一个需求真正做完。

2026-08-14 15:22:45 213

原创 Go语言反射(Reflection)详解:原理、作用、TypeOf与ValueOf区别及常用函数

Go语言反射机制详解 Go语言反射(Reflection)是让程序在运行时能够动态获取变量类型和值,并操作变量的机制。反射解决了静态类型语言在处理动态数据时的局限性,主要用于处理运行时才能确定类型的数据。 反射的核心是reflect.Type和reflect.Value两个对象: TypeOf()获取变量的类型信息(是什么类型) ValueOf()获取变量的数据信息(有什么值) 区别: TypeOf关注"是什么类型",用于类型判断和结构分析 ValueOf关注"有什么值",用于读取、修改数据和调用方法 反射

2026-08-01 09:45:39 309

原创 Gin框架中的四大HTTP请求方式详解:GET、POST、PUT、DELETE

幂等(Idempotent)表示:同一个请求执行一次和执行多次,最终结果是否一致。GET、POST、PUT、DELETE是 Web 开发中最基础的四种 HTTP 请求方式。请求方式含义GET获取资源POST创建资源PUT更新资源DELETE删除资源GET参数通常放在URL中POST数据通常放在Body中PUT用于更新已有数据DELETE用于删除资源GET、PUT、DELETE通常具有幂等性POST通常不具有幂等性。

2026-07-31 14:46:30 237

原创 为什么 Go 可以同时运行成千上万个 Goroutine?从程序执行到 GMP 调度模型

用户级:英文:User Level意思:由应用程序自己管理。例如:G1G2G3操作系统并不知道这些 Goroutine。线程1线程2G1G2G3所以:Goroutine 属于用户级调度。Goroutine:是 Go Runtime 创建的:用户级轻量执行单元。go task()G1注意:Goroutine 不是线程。线程Goroutine英文ThreadGoroutine管理者操作系统Go Runtime数量较少可以非常多切换成本高低。

2026-07-25 20:31:22 222

原创 为什么 Gin 能处理 HTTP 请求?从 GET、POST 到 JSON 返回的完整流程

静态文件:英文:意思:内容固定,服务器直接返回的文件。static└── app.js图片CSSJavaScriptHTML视频Gin 并不是负责创造 HTTP。它解决的问题是:如何更方便地接收 HTTP 请求,并把请求中的数据交给 Go 代码处理,再返回客户端需要的结果。HTTP请求↓Gin路由匹配↓获取参数↓业务处理↓返回响应(JSON/HTML/文件)

2026-07-18 18:11:23 191

原创 Redis Stream 是什么?为什么 Redis 5.0 要新增一种数据类型?

Stream(消息流)是 Redis 5.0 引入的一种数据类型,主要用于消息队列场景。它按照消息产生的先后顺序保存数据,每条消息都会拥有一个唯一的Message ID,方便后续读取、查询和管理。订单消息| Message ID | 消息内容 |每当有新的消息产生时,Redis 都会将它追加到 Stream 的末尾,并自动生成一个唯一的 Message ID。随着消息不断增加,整个数据结构就像一条持续流动的河流,因此 Redis 官方将它命名为Stream(流)。

2026-07-11 17:38:20 342

原创 HTTP到底是什么?浏览器和服务器之间到底发生了什么

HTTP有一个重要特点:不会记录之前的请求。每一次请求都是独立的,服务器不会记住用户。这就带来一个问题,比如登录之后刷新页面,服务器怎么知道还是同一个人?HTTP本身无法解决这个问题,因此需要额外机制。HTTP解决的是能不能通信的问题,而HTTPS解决的是能不能安全通信的问题。理解HTTP之后,再去理解HTTPS,会更容易明白为什么需要加密、证书和密钥协商。整个Web的发展,本质上就是从“能通信”走向“安全通信”的过程。

2026-06-27 20:47:54 398

原创 阅读开源项目,其实不需要从代码开始

摘要:阅读开源项目不应直接从代码细节入手,常见误区是顺序阅读导致碎片化理解。正确方法是:1)先找到程序启动入口;2)理解"输入-处理-输出"的核心流程;3)定位请求分发点;4)通过单条执行路径追踪而非通读代码;5)通过修改代码验证理解;6)最终尝试编写极简版本。关键在于在脑中重建系统运行机制,而非单纯阅读代码。这种自顶向下的方式能帮助开发者更快掌握项目架构和核心逻辑。

2026-06-20 16:58:34 318

原创 Go语言输入详解:fmt.Scan 和 bufio.NewReader 到底该怎么选?

文章摘要: Go语言输入操作主要有fmt.Scan和bufio.NewReader两种方式,分别适用于不同场景。fmt.Scan以空格、Tab或换行为分隔符读取字段,适合数字或单词输入;而bufio.NewReader按行读取,保留空格和完整内容,适合处理长文本、句子或文件数据。关键区别在于: fmt.Scan:简单但遇空格停止,适合结构化输入(如Scan、Scanln、Scanf)。 bufio.NewReader:灵活高效,适合大量数据或整行读取(如日志、用户描述)。 选择建议: 数字/单词 → fmt

2026-06-13 16:02:36 435

原创 HTTPS 到底安全在哪里?从三个经典问题彻底搞懂 TLS

HTTPS 的核心逻辑其实只有四步:通过数字证书确认服务器身份。使用非对称加密安全协商共享秘密。基于共享秘密生成会话密钥。使用对称加密保护后续所有通信。最终获得三种安全能力:机密性(Confidentiality)完整性(Integrity)身份真实性(Authentication)理解了这四步,再看 TLS 握手流程图时,看到的就不再是一堆协议字段,而是一套在开放互联网中逐步建立信任的工程方案。

2026-06-07 15:22:11 553

原创 ER图(实体-关系图)核心知识总结:从画图到关系模型转换

本文总结了ER图(实体-关系图)的核心知识,包括基本概念、图形表示规范、关系类型与基数约束、设计步骤以及转换为关系模型的规则。重点介绍了1:1、1:N和M:N三种关系的处理方式,特别是M:N关系必须单独建表。文中还提供了特殊属性的处理方法和常见设计注意事项,强调主键标识和多值属性的处理要点。最后总结了ER图设计的基本原则,强调其作为数据库概念设计工具的重要性。适用于数据库学习、面试准备和技术分享场景。

2026-05-30 15:32:53 650

原创 Go语言Channel机制深度解析:为什么它是Goroutine通信的首选方案?

Go语言Channel机制深度解析 摘要: Channel是Go语言实现goroutine间通信的核心机制,它通过"通信共享内存"而非"共享内存通信"的设计哲学,解决了传统并发编程中的认知负担高、易出错、逻辑耦合等问题。Channel将数据传递与同步控制统一起来,具备语言级支持、类型安全、并发安全等特性。文章详细分析了无缓冲Channel(同步模式)和有缓冲Channel(异步模式)的区别与适用场景,并通过工作池、扇出/扇入等典型模式展示了Channel的实际应用。相比传统并发原语,Channel能显著降低

2026-05-30 10:00:20 488

原创 Go Modules 基础命令速查

本文总结了Go Modules常用命令速查表,涵盖依赖管理、信息查看、清理修复等核心操作。主要内容包括:1) 基础命令如go mod init、go get和go mod tidy;2) 依赖版本控制方法;3) 查看依赖关系的命令;4) 常见问题解决方案。特别提供了本地调试替换依赖、固定版本等实用技巧,可作为日常开发快速参考指南。

2026-05-23 20:08:52 237

原创 Go 语言闭包:定义、原理与应用

维度要点定义函数 + 引用的外部变量作用状态保持、数据封装、函数工厂、延迟执行底层原理逃逸分析 + 堆分配 + 结构体包装注意事项循环变量捕获(需显式创建局部副本)闭包是 Go 语言中一项重要且实用的特性,理解它有助于写出更简洁、安全、模块化的代码。同时,掌握其底层原理可以避免常见的陷阱,写出更高质量的代码。希望这篇博客对你有帮助。如有问题或建议,欢迎交流讨论。

2026-05-17 15:40:25 400

原创 Go语言TCP网络编程:服务端与客户端端口配置详解

在Go语言TCP网络编程中,服务端与客户端的端口配置是一个容易混淆的基础知识点,尤其是`0.0.0.0`、`127.0.0.1`、`localhost`等地址的语义差异及不同网络环境下的配置方式。本文对此进行系统梳理,供读者参考。场景服务端配置客户端配置附加要求适用场景本机自连无本地开发调试局域网互联服务端局域网IP:8888无内部系统、家庭共享公网互联公网IP或穿透地址:8888端口映射或穿透工具远程访问、线上服务。

2026-05-01 10:30:36 734

原创 Go 语言文件操作完全指南

本文全面介绍 Go 语言文件操作的核心知识与最佳实践,涵盖基础 API 到性能优化。主要内容包括:标准库核心包(os、bufio、io 等)的功能解析;文件打开模式组合与权限设置;多种文件创建方式;小文件一次性读取与大文件分块读取方法;按行读取的两种实现对比;随机访问定位技巧;基本写入与追加写入操作;以及高性能缓冲写入的实现。文章还提供了常见场景的代码示例和性能对比,帮助开发者掌握高效、安全的文件操作技术。

2026-04-19 10:33:01 645

原创 使用 Go 语言实现简易命令行计算器

本文介绍了一个使用Go语言实现的简易计算器程序,支持四则运算、括号优先级、浮点数和负数运算。程序通过表达式合法性检查、词法分析、中缀转后缀表达式和后缀计算四个主要步骤实现功能。关键点包括:1) 检查连续运算符等错误;2) 将表达式拆分为tokens;3) 使用栈处理运算符优先级转换中缀表达式;4) 通过栈计算后缀表达式结果。此外还特别处理了负数情况,确保正确识别负号。程序提供了完整的错误检查机制,确保运算的准确性。

2026-04-07 15:08:32 270

原创 Go 语言输出函数完全指南:Print/Println/Printf 详解

场景推荐函数快速打印,需要换行不需要换行,完全自定义fmt.Print需要控制格式(小数位数、进制等)fmt.Printf%v:任意类型,万能写法%d:整数%s:字符串%f:浮点数(小数)随便看看结果 →fmt.Println(变量)要控制小数位数 →fmt.Printf("%.2f\n", 变量)不确定用什么 →fmt.Printf("%v\n", 变量)

2026-04-04 21:03:51 591

空空如也

空空如也

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

TA关注的人

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