Go语言技术文章
-
Go语言通过error接口显式处理错误,推荐使用errors.Is和errors.As判断错误类型,避免忽略err值;针对可预期错误进行类型识别,合理使用panic与recover应对不可恢复错误,并通过自定义错误类型和错误包装(%w)增强上下文信息,提升程序健壮性。112 收藏 -
Go服务平滑重启和优雅关闭的核心是http.Server.Shutdown()配合信号监听与带超时context,且必须通过fd复用socket;缺一不可,否则丢请求、断连接、泄漏goroutine。112 收藏 -
在Golang中,path库用于处理通用路径字符串,适合非操作系统层面的路径操作。1.path包提供路径拼接(Join)、目录提取(Dir)、文件名获取(Base)、路径清理(Clean)和扩展名读取(Ext)等功能;2.使用Join可智能拼接路径,避免手动处理分隔符和冗余字符,提升跨平台兼容性;3.Dir、Base、Ext组合可用于解析路径中的关键信息,便于文件处理与日志记录;4.Clean函数规范路径格式,去除多余斜杠、点号和双点号,确保输入路径一致性。该库适用于构建URL或解析资源路径等场景,但不涉112 收藏 -
反引号字符串不支持变量插值,仅作纯字面量使用;它不转义任何字符(包括\n、${var}),保留全部空白与换行,适用于正则、SQL、YAML等需严格格式的场景。112 收藏 -
Go1.12+才支持reflect.MapIter,应优先用reflect.Value.MapRange()安全遍历map;低于该版本需降级为MapKeys()+MapIndex(),并严格检查IsValid()和IsNil()以避免panic。112 收藏 -
nats.Connect连不上JetStream是因服务端未启用,需加-js参数或配置jetstream块;js.Publish失败、消息丢失、重复消费等问题均源于JetStream未正确配置和使用。112 收藏 -
Golang · Go问答 | 3星期前 | golang · 超时 · HTTP · Go问答 · Transport · 网络排查 · 连接超时 http.Transport Client.Timeout Go HTTP 客户端超时 TLS握手超时
Go 的 http.Client 超时太粗时,DNS、建立连接、TLS 握手和响应读取会混在同一个等待里。本文用一段可复现的慢请求场景拆开 Transport 参数,给出基线指标、改动方案和复测边界。112 收藏 -
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏 -
os.Seek的offset从哪算取决于whence参数:SEEK_SET从文件开头、SEEK_CUR从当前位置、SEEK_END从文件末尾;非寻址设备不支持Seek,多goroutine共用*os.File时Seek会相互干扰。111 收藏 -
slog默认不支持级别过滤,需自定义Handler实现:通过LevelFilterHandler包装标准Handler,在Handle方法中判断rec.Level>=minLevel决定是否输出。111 收藏 -
Golang · Go教程 | 1个月前 | 中间件 · HTTP · recover · Go教程 · 日志排障 · recover panic 结构化日志 HTTP中间件 request_id Go教程 接口排障
从 Go HTTP 接口偶发 500 和 panic 堆栈入手,逐层补上请求 ID、recover 中间件、统一 JSON 错误、结构化日志和反向验证清单,避免服务崩溃且便于定位问题。111 收藏 -
Golang · Go问答 | 3星期前 | 云原生 · golang · 性能优化 · kubernetes · HPA · Go HPA不扩容 Kubernetes HPA CPU resources requests HPA并发指标 Go服务扩缩容
Go 服务部署到 Kubernetes 后,HPA 没有按预期扩容,常见原因不是 HPA 失效,而是 CPU 利用率与 requests 的关系、业务真实瓶颈和缩放行为没有对齐。本文用最小 HPA 配置说明何时选 CPU、何时考虑并发或队列指标,以及如何避免扩缩容抖动。111 收藏 -
Pod是Kubernetes调度和管理的最小单位,本质为共享网络、存储且共进退的容器协作单元;底层由pause容器占住网络命名空间并作为根进程维持Pod生命周期;调度经过滤与打分两阶段;状态需结合describe和logs深入排查。110 收藏 -
net/http.Hijacker是Go标准库中用于劫持HTTP连接的接口,必须在需绕过HTTP协议栈直接操作底层TCP连接时使用,如WebSocket升级、HTTPS代理隧道、自定义二进制协议等;调用前响应未写出,且HTTP/2环境下不可用。110 收藏 -
Go推荐用os.CreateTemp和os.MkdirTemp创建临时文件与目录,支持自动命名、权限与路径安全;测试中优先使用t.TempDir()和t.Cleanup()实现自动清理。109 收藏