Go语言技术文章
-
使用令牌桶限流、复用HTTP连接、控制并发与超时、启用压缩等手段提升Go服务稳定性。具体:1.用golang.org/x/time/rate实现请求限流,防止突发流量过载;2.共享http.Client并配置Transport参数以复用连接;3.利用channel和context控制最大并发数与请求超时;4.客户端声明Accept-Encoding:gzip,服务端中间件自动压缩响应;5.优化API减少冗余数据传输。组合这些策略可显著提高高并发场景下的系统性能与可靠性。150 收藏 -
goroutine泄漏已发生,pprof/debug/pprof/goroutine?debug=2可确认:若见432000s(5天)等超长阻塞时长,且chanreceive/select状态数持续单增,即为泄漏;重点排查ssh、httpreadLoop/writeLoop及自定义channel退出路径。148 收藏 -
ReceiverQueueSize设为0会被自动修正为1000,因客户端消费依赖非空缓冲区触发消息分发,强行设0将导致Receive()阻塞在waiting状态;其本质是控制Broker推送批量大小,而非拉取粒度。147 收藏 -
Golang · Go教程 | 3星期前 | 并发编程 · 数据竞争 · Go教程 · 生产实践 · race detector · golang Go 数据竞争 并发 sync atomic race detector go test -race
从共享计数器和订单状态缓存出发,讲清 Go race detector 的运行方式、报告解读、修复策略、CI 阻断和上线检查。147 收藏 -
异步写入避免阻塞:通过内存缓冲和独立goroutine解耦日志写入;2.合理轮转策略:按大小轮转、限制备份数、延迟压缩;3.优化库配置:调整lumberjack的MaxSize、MaxBackups,复用文件句柄;4.减少日志开销:去除冗余、结构化输出、高频日志采样。需持续调优以避免性能瓶颈。145 收藏 -
围绕 Go 1.24 新增的 os.Root、OpenInRoot 和 Root.Open,讲清路径遍历防护、符号链接边界、文件上传、安全解压、测试用例和老项目迁移方式。144 收藏 -
Cursor生成的Go网络状态机代码类型不安全、测试覆盖不足、存在竞态与泄漏、缺乏Mock隔离——因用string定义状态致编译期无法校验非法赋值,测试仅覆盖主路径而忽略非法转移与并发场景,HandleEvent混入耗时操作且未用context管控生命周期,未抽象网络依赖接口导致测试不稳定。143 收藏 -
逃逸分析本身不直接导致内存碎片,而是因小对象逃逸至堆、高频分配释放及GC延迟,造成mheap中大量不连续小span堆积形成外部碎片。143 收藏 -
从生产排障角度讲 Go log/slog 的结构化字段、context logger、错误日志、脱敏、日志级别和 trace/metrics 关联。143 收藏 -
Go原生错误不带堆栈,需用github.com/pkg/errors.Wrap或runtime/debug.Stack()手动添加;Go1.20+支持错误链但不自动记录堆栈;日志加Lshortfile标志更轻量实用。142 收藏 -
本文回答 Go 里 sync.Once 为什么能保证函数只执行一次、多个协程同时调用时内部做了什么、以及在配置加载、单例初始化和懒加载里怎么安全复用。142 收藏 -
Go接口无运行时方法签名,reflect无法获取接口要求的方法列表;只能通过具体实现类型的实例反射其方法,且需用指针接收者确保完整性。141 收藏 -
原型模式通过复制现有对象创建新对象,在Go中利用接口和结构体实现克隆,支持浅拷贝与深拷贝,结合注册表可管理原型实例,适用于频繁创建相似对象的场景。141 收藏 -
用带缓冲channel实现多生产者多消费者队列,tasks:=make(chanstring,100)创建共享队列,生产者并发写入、消费者forrange监听,关闭由生产者统一执行。141 收藏 -
Go的map默认非并发安全,多goroutine读写会触发panic;sync.Map适用于高读低写场景,但不支持遍历且无泛型;推荐用泛型SyncMap+RWMutex封装以兼顾类型安全与并发控制。141 收藏