Go语言技术文章
-
方法接收者用T还是T取决于是否需修改原值:只读用T,修改必用T;结构体大时T可减拷贝开销;混用导致方法集不一致;sync.Mutex等状态类型必须用T且禁止复制。301 收藏 -
把一次请求拆成入口、并发扇出、下游调用、取消和收尾几个阶段,建立并发治理的全局视角。301 收藏 -
用服务配置文件解析场景讲清楚 Go 处理 JSON 的稳定写法:用结构体标签承载字段映射,先填默认值,再用 decoder 检查未知字段,最后得到类型明确的配置对象。301 收藏 -
Golang · Go教程 | 3星期前 | errgroup · go · Context · 并发编程 · SetLimit · Go 并发任务 errgroup SetLimit context取消
Go 后端经常需要并发查询多份数据。本文按完整工作流拆解 errgroup.WithContext、错误取消、SetLimit 控制并发、互斥收集结果和 Wait 统一检查,避免任务失控。301 收藏 -
直接用colly.NewCollector()会漏抓页面,因其默认不启用重试、不处理重定向、不设User-Agent,遇302/403即放弃;真实网站多校验UA,无设置易被nginx拦截。300 收藏 -
Go不支持真正的全局常量,但可通过点导入或统一错误包等方式实现跨包访问;然而直接省略包名会损害可读性与可维护性,推荐使用语义化错误类型或带前缀的常量导出。300 收藏 -
核心是“要不要”而非“能不能”:标准库encoding/json已足够健壮,自写反射序列化仅适用于需绕过标签规则、序列化私有字段、注入元信息或对接非标协议等特定场景。300 收藏 -
应使用prometheus.NewCounter定义请求总数和错误总数指标,提前注册带ConstLabels的Counter并在handler中调用Inc(),不可用全局变量或Set();需按维度打标签时改用NewCounterVec。300 收藏 -
Go不支持直接类型断言或强制转换字符串切片为interface{}切片,必须逐项遍历并显式装箱(boxing)每个元素,才能正确传递给接受...interface{}的函数。300 收藏 -
Go适合云原生开发因其运行时行为、构建产物和并发模型天然适配容器化场景:goroutine内存占用低、调度不依赖OS线程、静态二进制轻量安全,且能自动适配cgroup限制。300 收藏 -
代理模式通过代理对象控制对真实对象的访问,Go语言利用接口和组合机制实现该模式。代理与真实对象实现相同接口,客户端无感知地通过代理调用,代理可在请求前后添加日志、权限、缓存等逻辑。典型应用包括远程、虚拟、保护和缓存代理。例如,缓存代理可避免重复耗时操作,提升性能。Go的简洁接口使代理模式实现清晰灵活,关键在于合理设计接口粒度,确保代理职责单一。299 收藏 -
goroutine不会卡死整个线程是因为GMP模型实现动态解耦:G绑定P,P可被空闲M抢占接管;阻塞时M脱离P,其他M立即续跑其余G,配合netpoller和异步抢占机制保障并发响应。299 收藏 -
必须先开启Redis的notify-keyspace-events配置,设为"Ex"并重启或重写配置,否则无法收到__keyevent@0__:expired等消息;订阅需匹配实际DB编号,使用独立连接、recover防护及幂等处理。299 收藏 -
recover必须在defer函数中调用才有效,且仅对当前goroutine中正在传播的panic生效;若未在defer中或panic已退出函数,则recover恒返回nil。299 收藏 -
Go中文件下载需手动读取并设置Content-Disposition等Header以控制下载行为,支持断点续传需用http.ServeContent,客户端下载要处理重定向和大小限制,中文文件名需按RFC5987编码或使用ASCII替代。299 收藏