Go语言技术文章
-
Golang · Go问答 | 4天前 | golang · errgroup · Context · 并发控制 · Go问答 · SetLimit · 错误传播 Go errgroup.SetLimit errgroup.WithContext Go 并发限制 批量调用 context 取消
批量请求第三方接口时,errgroup.WithContext 配合 SetLimit 能把并发上限、首个错误返回和派生上下文取消放进同一段代码。这里给出可直接核对的最小写法、限额取值与几个容易卡住的边界。467 收藏 -
Go 服务的正则匹配突然占满 CPU,常见原因不是规则本身,而是每次请求都重新编译 regexp。本文用基线、pprof 和缓存编译结果的对比,说明如何定位并控制这类热路径开销。467 收藏 -
用 Go 标准库实现 HTTP 文件上传时,不能只调用 FormFile 就直接落盘。本文通过一个最小项目说明请求体大小限制、multipart 解析、文件关闭、受控命名和上传后检查的实现顺序。466 收藏 -
Golang · Go教程 | 6天前 | 切片 · Slices · Go教程 · Go 1.21 · 切片删除 Go教程 Go slices.Delete slices.DeleteFunc Go 1.21
Go 标准库 slices.Delete 会返回修改后的切片。本文用一个最小实验说明为什么必须接收返回值、底层数组何时仍被复用,以及批量删除时怎样避免循环删元素。463 收藏 -
Golang · Go教程 | 2星期前 | channel · select · Context · Go教程 · 性能排查 · select channel context default time.Ticker Go教程 CPU飙高 for select
Go 里的 select default 适合做非阻塞试探,但放进无等待的 for 循环后,代码会在没有 channel 事件时持续空转,常见表现就是 CPU 飙高、日志刷屏和退出路径混乱。459 收藏 -
Golang · Go教程 | 3天前 | golang · HTTP · go · 服务端 · 实战 · 安全配置 · http.server MaxBytesReader ReadHeaderTimeout Go HTTP 服务 请求体限制 响应头限制
Go 的 http.Server 默认足够启动一个接口,却不会替业务限定大请求体、慢请求头和响应写入时间。本文用上传接口的真实边界,拆解 MaxBytesReader、ReadHeaderTimeout、WriteTimeout 与 MaxHeaderBytes 的职责,并给出可复查的生产配置。455 收藏 -
Golang · Go教程 | 6天前 | golang · 配置 · 设计模式 · go · client · api设计 · Go 构造函数 Functional Options 函数选项 Client 配置 API 兼容
Functional Options 适合“少量必填参数稳定、可选项会逐步增加”的 Go Client 构造场景。它能避免频繁改函数签名,并让调用点保留 WithTimeout、WithRetry 这类具名配置;但配置总是成组出现、需要从文件反序列化,或只有一个可选值时,Config 结构体或新增构造函数往往更直接。关键不在模式名称,而在默认值、重复选项与兼容边界是否明确。454 收藏 -
Golang · Go问答 | 3星期前 | go语言 · HTTP客户端 · Go问答 · 连接复用 · 排查清单 · net/http 连接复用 HTTP响应体 Go问答 resp.Body.Close 排查清单
本文从 Go HTTP 客户端连接数上涨的现象出发,按代码、连接池和日志三层检查响应体是否读完并关闭,给出修复写法、反向验证和上线清单。452 收藏 -
用 Go 的 context.WithCancelCause 连接并发任务,让上游知道是超时、校验失败还是依赖服务异常,并用 Cause 做可验证的错误分类。450 收藏 -
Go 里值接收者和指针接收者的选择,不只影响是否能修改对象,还会影响类型能不能满足接口。值方法通常同时属于值和指针的方法集,指针方法只属于指针的方法集。要修改对象、避免大结构体拷贝或保持方法接收者一致时,优先用指针接收者;小型不可变值可以用值接收者。449 收藏 -
Golang · Go问答 | 4天前 | WaitGroup · golang · goroutine · 并发编程 · Go问答 · Go 1.25 · Goroutine 并发 WaitGroup Go 1.25 sync.WaitGroup.Go Add Done
Go 1.25 为 sync.WaitGroup 增加了 Go 方法,常见的 Add、go func、defer Done 三段式可以收成一次调用。它能减少计数配对遗漏,却不会替业务处理 panic、取消或结果收集。本文用批量写入场景解释最小写法、和旧写法的边界差异、版本兼容与复用 WaitGroup 时容易忽略的顺序。448 收藏 -
Go 服务接收 JSON 时,json.Decoder 和 json.Unmarshal 的区别不只在写法。本文用连续 JSON 请求的真实场景,说明如何选择解析方式、如何检查请求体边界,以及怎样避免多读数据或漏掉尾部内容。446 收藏 -
围绕 Go 文件下载接口的路径穿越风险,解释 filepath.Clean 为什么不等于安全校验,并给出安全根目录、相对路径判断、扩展名白名单、审计日志和验证用例。445 收藏 -
Golang · Go问答 | 5天前 | time.Parse · 时间处理 · Go问答 · Go基础 · 日期解析 · Go 日期解析 time.Parse YYYY-MM-DD 2006-01-02
Go 的 time.Parse 不认识 YYYY-MM-DD 这类常见日期格式符,它用 2006-01-02 这组参考时刻来描述布局。文章从解析失败的报错入手,给出最小修复、UTC 与业务时区的边界、ParseError 的定位字段和可回归的日期测试,避免日期字段在接口或报表中悄悄偏移。443 收藏 -
Golang · Go问答 | 2星期前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 ticker
Go select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏