-
从线上排障角度讲 errors.Is/As、fmt.Errorf %w、错误分层、日志上下文和用户可见错误的边界。
-
Go 解析 JSON 不只看写法短不短。本文围绕字段稳定性、数据量、数字精度、未知字段和延迟解析,比较 struct、map、RawMessage 与 Decoder 的适用场景。
-
Go 项目从 fmt.Println 走向结构化日志后,标准库 slog、zap 和 zerolog 都能完成 JSON 输出,但默认行为、扩展方式、性能与迁移成本并不一样。本文按项目约束比较三种方案,并给出可落地的选择规则。
-
秒杀系统需分层限流、原子扣减与防超卖:网关用rate.Limiter限流,Redis+Lua严格校验库存并返回明确状态,MySQL订单表建联合唯一索引,缓存采用逻辑过期+singleflight防击穿。
-
雪崩效应是服务调用链中某节点响应变慢或失败,导致上游资源持续堆积并拖垮整体;代码中表现为正常HTTP调用(如restTemplate.getForObject)却耗尽线程池,需通过Resilience4j的record-failure-expression显式纳入耗时判断并配合TimeLimiter超时控制来防御。
-
必须由独立goroutine在wg.Wait()后统一close(ch),因多生产者自行关闭易致panic、数据丢失或消费者阻塞;单生产者自关看似可行但扩展后风险高。
-
用exec.Command调用ffmpeg提取视频元信息需注意:确保ffmpeg在PATH中;加-vquiet-print_formatjson-show_entries控制输出;正确解析带点字段的JSON;设置超时并kill子进程;Windows下路径直接传入无需引号,但需处理编码和反斜杠。
-
Go链接过程由cmd/link全自动完成,不暴露用户控制;纯Go代码无传统链接,仅cgo场景才调用系统链接器处理C符号,此时#cgoLDFLAGS生效。
-
最可靠判断结构体的方式是reflect.TypeOf(v).Kind()==reflect.Struct,需先解引用指针、检查接口有效性,并避免在热路径滥用反射。
-
使用令牌桶限流、复用HTTP连接、控制并发与超时、启用压缩等手段提升Go服务稳定性。具体:1.用golang.org/x/time/rate实现请求限流,防止突发流量过载;2.共享http.Client并配置Transport参数以复用连接;3.利用channel和context控制最大并发数与请求超时;4.客户端声明Accept-Encoding:gzip,服务端中间件自动压缩响应;5.优化API减少冗余数据传输。组合这些策略可显著提高高并发场景下的系统性能与可靠性。
-
Go 服务收到 SIGTERM 后,ListenAndServe 已经返回但进程仍迟迟不退出,通常不是 Shutdown 失效,而是活跃连接、长请求、HTTP/2 或 hijack 连接没有走完各自的收尾路径。本文用 ConnState、Shutdown 超时和 RegisterOnShutdown 拆开判断顺序,并给出可回归的优雅退出实现。
-
reflect.DeepEqual在测试中难用,因其对nil切片与空切片判为不等、无法忽略字段、不报告差异位置、强制比较未导出字段且无自定义逻辑(如时间截断、浮点容差),导致CI偶发失败及调试困难。
-
Go语言中只有类型转换(同底层类型间显式转换)和类型断言(接口值动态类型提取);前者是编译期行为,不改变数据,后者是运行期行为,需谨慎处理panic风险。
-
unsafe不能真正“紧凑化”结构体对齐,因其无法修改编译器决定的字段偏移和对齐规则;它仅支持运行时指针操作模拟紧凑布局,但原始结构体的Sizeof和Offsetof仍由编译期对齐策略固定。
-
goroutine泄漏已发生,pprof/debug/pprof/goroutine?debug=2可确认:若见432000s(5天)等超长阻塞时长,且chanreceive/select状态数持续单增,即为泄漏;重点排查ssh、httpreadLoop/writeLoop及自定义channel退出路径。