<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>浩瀚星河</title><description>浩瀚星河的个人技术博客, 记录 Golang 学习与开发实践。</description><link>https://www.golangblog.com/</link><item><title>工作中如何做好技术积累</title><link>https://www.golangblog.com/blog/study-vs-work/</link><guid isPermaLink="true">https://www.golangblog.com/blog/study-vs-work/</guid><description>古人云：“活到老，学到老。”互联网算是最辛苦的行业之一，“加班”对工程师来说已是“家常便饭”，同时互联网技术又日新月异，很多工程师都疲于应付，叫苦不堪。以至于长期以来流传一个很广的误解：35岁是程序员工作的终点。  如何在繁忙的工作中做好技术积累，构建个人核心竞争力，相信是很多工程师同行</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate></item><item><title>wrk压测工具</title><link>https://www.golangblog.com/blog/wrk/</link><guid isPermaLink="true">https://www.golangblog.com/blog/wrk/</guid><description>本文围绕 wrk 压测工具展开，从基础使用到结果分析，结合错误率、尾延迟（P95/P99）、稳定性等核心指标，给出一套可落地的评估方法，用于定位系统性能瓶颈并计算稳定状态下的最大可承载吞吐量。</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>千万级 Mysql 表结构变更实战</title><link>https://www.golangblog.com/blog/gh-ost-migrate-mysql-online/</link><guid isPermaLink="true">https://www.golangblog.com/blog/gh-ost-migrate-mysql-online/</guid><description>利用 gh-ost 安全、实时地迁移数据，实现大表结构变更，无停机、无锁表。</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate></item><item><title>MySql主从复制</title><link>https://www.golangblog.com/blog/mysql-master-slave-copy/</link><guid isPermaLink="true">https://www.golangblog.com/blog/mysql-master-slave-copy/</guid><description>MySql主从复制原理和安装步骤</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Go遍历时删除特定元素</title><link>https://www.golangblog.com/blog/go-delete-element-in-range/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-delete-element-in-range/</guid><description>Go遍历时候删除元素时候的坑，不能正序删除，不然会引起索引错位</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Golang中的优雅关闭与退出</title><link>https://www.golangblog.com/blog/go-graceful-shutdown/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-graceful-shutdown/</guid><description>Golang中的优雅关闭与退出，去做一些日志刷盘、关闭基础设施和goroutine连接的操作。</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Github CI自动发版</title><link>https://www.golangblog.com/blog/git-semantic-release/</link><guid isPermaLink="true">https://www.golangblog.com/blog/git-semantic-release/</guid><description>github自动发版, 无需手动打tag发版</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate></item><item><title>git-filter-repo 清理敏感信息</title><link>https://www.golangblog.com/blog/git-filter-repo/</link><guid isPermaLink="true">https://www.golangblog.com/blog/git-filter-repo/</guid><description>git-filter-repo清理敏感信息，防止git提交了敏感信息后导致的密钥泄漏</description><pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate></item><item><title>初识mcp server</title><link>https://www.golangblog.com/blog/mcp-server-intro/</link><guid isPermaLink="true">https://www.golangblog.com/blog/mcp-server-intro/</guid><description>mcp server原理理解，实操教程，ai客户端引入以及对ai编程的一些看法</description><pubDate>Sun, 28 Dec 2025 00:00:00 GMT</pubDate></item><item><title>短视频的推荐算法</title><link>https://www.golangblog.com/blog/recemmend-algorithm/</link><guid isPermaLink="true">https://www.golangblog.com/blog/recemmend-algorithm/</guid><description>短视频推荐算法之研究，因为工作需要用到</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate></item><item><title>webhook是什么</title><link>https://www.golangblog.com/blog/what-is-webhook/</link><guid isPermaLink="true">https://www.golangblog.com/blog/what-is-webhook/</guid><description>webhook概念，基本用途和使用方法</description><pubDate>Tue, 18 Nov 2025 00:00:00 GMT</pubDate></item><item><title>GitLab Runner 使用与 CICD 全面指南</title><link>https://www.golangblog.com/blog/gitlab-ci/</link><guid isPermaLink="true">https://www.golangblog.com/blog/gitlab-ci/</guid><description>Gitlab使用教程以及CI/CD的配置，触发工作流，减少手动部署的成本</description><pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Go Zap实现日志双写和切割</title><link>https://www.golangblog.com/blog/go-zap/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-zap/</guid><description>go-zap日志双写，日志切割，使用的zap库中的sugar版本</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate></item><item><title>canal安装与使用</title><link>https://www.golangblog.com/blog/canal/</link><guid isPermaLink="true">https://www.golangblog.com/blog/canal/</guid><description>canal教程</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate></item><item><title>kafka-go使用</title><link>https://www.golangblog.com/blog/kafka-go/</link><guid isPermaLink="true">https://www.golangblog.com/blog/kafka-go/</guid><description>kafka-go的安装与使用教程【简易版】</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate></item><item><title>elasticsearch安装与使用</title><link>https://www.golangblog.com/blog/elasticsearch/</link><guid isPermaLink="true">https://www.golangblog.com/blog/elasticsearch/</guid><description>elasticsearch是一个分布式搜索引擎，本文讲述了elasticsearch的安装与使用</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate></item><item><title>go-elasticsearch使用指南</title><link>https://www.golangblog.com/blog/elasticsearch-go/</link><guid isPermaLink="true">https://www.golangblog.com/blog/elasticsearch-go/</guid><description>go-elasticsearch v9版本go api的用法</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate></item><item><title>kratos中proto文件引入其他proto爆红</title><link>https://www.golangblog.com/blog/kratos-proto-error/</link><guid isPermaLink="true">https://www.golangblog.com/blog/kratos-proto-error/</guid><description>记录一下vscode写kratos的一些问题</description><pubDate>Sat, 25 Oct 2025 00:00:00 GMT</pubDate></item><item><title>go中的defer</title><link>https://www.golangblog.com/blog/go-defer/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-defer/</guid><description>本文讲述 Go 函数返回值与 defer 执行顺序的关系，通过三个实例分析值类型、具名返回值及引用类型在返回过程中的不同表现。</description><pubDate>Tue, 30 Sep 2025 00:00:00 GMT</pubDate></item><item><title>腾讯云发送短信</title><link>https://www.golangblog.com/blog/tecent-sms-send/</link><guid isPermaLink="true">https://www.golangblog.com/blog/tecent-sms-send/</guid><description>短信验证码业务主要流程是用户请求后端，后端生成随机 6 位验证码，存入 Redis 缓存并调用腾讯云短信 SDK 发送到用户手机。前端提示短信发送成功，用户再输入验证码完成验证。为了防止接口被滥用，需要增加限流、图片验证码或签名加密等保护措施。</description><pubDate>Sun, 28 Sep 2025 00:00:00 GMT</pubDate></item><item><title>什么是勇敢</title><link>https://www.golangblog.com/blog/what-is-brave/</link><guid isPermaLink="true">https://www.golangblog.com/blog/what-is-brave/</guid><description>什么是勇敢呢</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate></item><item><title>go中的方法提升</title><link>https://www.golangblog.com/blog/go-method-up/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-method-up/</guid><description>今天聊一下go的方法提升，在很多源码看到，查资料才发现可以这样用</description><pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate></item><item><title>docker部署mysql中文乱码问题</title><link>https://www.golangblog.com/blog/docker-mysql-charset-problem/</link><guid isPermaLink="true">https://www.golangblog.com/blog/docker-mysql-charset-problem/</guid><description>docker部署mysql中文乱码，修改两处字符集解决问题</description><pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate></item><item><title>10万行报表导出优化实战：从 OFFSET 到游标分页</title><link>https://www.golangblog.com/blog/report-export-optimization-from-offset-to-cursor-pagination/</link><guid isPermaLink="true">https://www.golangblog.com/blog/report-export-optimization-from-offset-to-cursor-pagination/</guid><description>这篇文章记录了一次大数据报表导出的优化实践。业务需求要求一次性导出10万条数据到Excel，最初采用全表扫描配合OFFSET分页，单次导出耗时超过30秒。经过分析慢查询日志，发现主要瓶颈在SQL层面和Excel写入方式。优化过程包括：只查询必要字段、去除无效条件、并发分片查询、流式写入Excel、最后引入游标分页避免大OFFSET扫描。最终导出耗时降至8秒。本文总结了SQL调优、分页策略以及大规模数据导出的关键经验。</description><pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate></item><item><title>不急于求成，才是最长远的成长</title><link>https://www.golangblog.com/blog/the-courage-to-grow-slowly/</link><guid isPermaLink="true">https://www.golangblog.com/blog/the-courage-to-grow-slowly/</guid><description>在浮躁与内卷的社会中，保持专注与冷静，缓慢向上，也是最难得的成长勇气。</description><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate></item><item><title>redis在go中的实践</title><link>https://www.golangblog.com/blog/redis-in-golang-practice/</link><guid isPermaLink="true">https://www.golangblog.com/blog/redis-in-golang-practice/</guid><description>这篇文章记录了我在学习极客时间大明老师课程后，对 Redis 在 Go 项目中的实践总结。从初始化 Redis 客户端，到在仓储层引入缓存模块，再到结合 DDD 思想实现数据查询与缓存的解耦，逐步形成了更优雅的使用方式。</description><pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate></item><item><title>go 反射</title><link>https://www.golangblog.com/blog/go-reflect/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-reflect/</guid><description>反射是程序在运行时动态访问、检测和修改自身状态的能力，通过反射可以获取类型信息、调用方法或修改字段值。在Go语言中，反射由reflect包实现，核心是reflect.Type（类型接口）和reflect.Value（值结构体），分别对应接口的类型和值部分。反射常用于序列化、ORM框架等场景，但存在性能开销大、代码可读性差、破坏封装性等缺点。优化方法包括缓存反射结果、减少高频调用或使用替代方案（如泛型）。反射适合框架开发等动态需求场景，但业务代码中应谨慎使用</description><pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate></item><item><title>go timer定时器</title><link>https://www.golangblog.com/blog/go-timer/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-timer/</guid><description>Timer 用于一次性计时，可通过 C 通道接收时间；AfterFunc 用于异步回调，不通过 C 通道；Ticker 用于周期性计时；select 多个就绪 case 随机选择，break 仅退出当前块</description><pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate></item><item><title>go context学习之旅</title><link>https://www.golangblog.com/blog/go-context1/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-context1/</guid><description>Go语言的context包是并发编程的核心工具，主要用于管理goroutine的生命周期、传递取消信号和请求范围数据。通过WithCancel、WithTimeout、WithDeadline和WithValue等方法，可以从根context派生出子context，形成树状结构，实现优雅的协程控制和超时管理。context广泛应用于HTTP请求、数据库操作等场景，确保资源及时释放，避免泄漏。最佳实践包括及时调用cancel()、避免滥用WithValue传递业务参数，以及在goroutine中监听ctx.Done()以响应取消信号</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>go jwt和redis实现用户登录注册以及查询</title><link>https://www.golangblog.com/blog/go-jwt-redis-demo/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-jwt-redis-demo/</guid><description>本项目基于 Gin + GORM + MySQL + Redis，实现了一个简单的用户登录注册系统，核心功能包括 JWT 鉴权与 Redis 用户缓存。用户登录成功后签发 JWT，访问受保护接口时通过中间件校验 Token，有效提升接口安全性。用户资料优先从 Redis 获取，未命中则回源数据库并写入缓存，兼顾性能与一致性，适合作为入门级全栈身份认证系统的学习案例。</description><pubDate>Fri, 08 Aug 2025 00:00:00 GMT</pubDate></item><item><title>channel实现简易eventbus</title><link>https://www.golangblog.com/blog/go-channel5/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-channel5/</guid><description>本文介绍了一个适用于单机模块的 Go 语言事件总线（Eventbus）实现，用于异步事件的发布与订阅。通过 map[string]*EventChans 管理事件与多个通道的映射关系，并结合读写锁 sync.RWMutex 保证并发安全，实现了 Subscribe、UnSubscribe、Publish 三个核心方法，展示了如何安全高效地进行事件分发。适合 Go 初学者理解 channel 和并发控制。</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate></item><item><title>go中的panic和recover</title><link>https://www.golangblog.com/blog/go-panic/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-panic/</guid><description>Go 中的 `panic` 会导致当前 goroutine 崩溃，若未被 `recover` 捕获，则程序终止。`recover` 需配合 `defer` 使用，只能捕获**当前 goroutine** 内的 panic。若 panic 发生在子 goroutine 中，主 goroutine 的 `recover` 无法捕获，程序仍会崩溃，因此每个 goroutine 内需单独设置 `defer+recover` 才能防止异常扩散。</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate></item><item><title>channel的select case控制语句</title><link>https://www.golangblog.com/blog/go-channel4/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-channel4/</guid><description>`select case` 用于监听多个 channel 的就绪状态，只有当对应的读写操作**不阻塞**时才会执行。无缓冲通道需读写同时存在才就绪，有缓冲通道读需有值、写需未满。若多个 case 同时就绪，`select` 会**随机选择一个执行**，否则执行 `default`。配合 `time.After` 可实现超时控制，是并发中的常用模式。</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate></item><item><title>channel 基本概念</title><link>https://www.golangblog.com/blog/go-channel1/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-channel1/</guid><description>在 Go 语言中，channel 是一种用于**协程间通信**的数据结构。根据是否带缓冲区，channel 可分为**无缓冲区**和**有缓冲区**两类。

**无缓冲区的 channel** 是一种同步通信方式，发送和接收必须“当场配对”，发送方在没有接收方的情况下会被挂起，直到数据被接收。这就像一个共享的杯子，只有顾客喝掉牛奶，奶农才能继续挤下一杯。

**有缓冲区的 channel** 则支持异步通信，可以预先存入一定数量的值，只在缓冲区满时才会阻塞发送。它更像一个小型车间，奶农可以提前挤奶放进去，顾客随时取用。

理解这两者的差异对于编写高效的并发程序非常关键，尤其是在处理 goroutine 调度与通信时。
</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate></item><item><title>缓冲区为 1 和无缓冲区的 channel 有什么区别</title><link>https://www.golangblog.com/blog/go-channel2/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-channel2/</guid><description>带缓冲区的 channel（如容量为 1）允许发送方先发送后接收，不会立即阻塞；而无缓冲区的 channel 发送操作会阻塞当前 goroutine，直到有接收方同步接收，否则会造成死锁。因此缓冲区提供了发送和接收的解耦能力。</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate></item><item><title>channel之生产者消费者模型</title><link>https://www.golangblog.com/blog/go-channel3/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-channel3/</guid><description>生产者消费者模型通过引入缓冲区，实现了生产与消费的解耦。无缓冲区的 channel 要求生产者与消费者同步配合，否则会阻塞，适合处理必须顺序执行的场景；而有缓冲区的 channel 则允许生产者先发送多个数据，无需等待消费者处理完成，适用于并发处理、异步任务等高性能场景。缓冲区提升了系统的灵活性、并发性和容错性。</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate></item><item><title>使用minio的go sdk上传文件</title><link>https://www.golangblog.com/blog/go-minio/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-minio/</guid><description>MinIO 是一款开源的分布式对象存储服务，兼容 S3 协议，通过 Go SDK 可以轻松实现文件上传，只需初始化客户端并调用 FPutObject 方法即可完成文件存储，支持自定义 Content-Type 和私有化部署，是替代商业 OSS 的高性价比方案。</description><pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate></item><item><title>wire优雅的管理go项目</title><link>https://www.golangblog.com/blog/go-wire/</link><guid isPermaLink="true">https://www.golangblog.com/blog/go-wire/</guid><description>Wire 是 Google 开发的 Go 依赖注入工具，通过自动生成代码管理模块依赖关系，解决手动初始化导致的混乱问题。它使用 wire.Build 定义依赖链，支持接口绑定和构造器集合，执行 wire 命令即可生成初始化代码。虽然学习成本较高，但能显著提升大型项目的可维护性，特别适合与 Gin 等框架集成使用。需注意处理循环依赖和接口绑定，小项目可能增加复杂度。</description><pubDate>Sat, 26 Jul 2025 00:00:00 GMT</pubDate></item></channel></rss>