Go语言技术文章
-
Go 中无缓冲结果 channel 如果没有接收方,发送 goroutine 会一直等待。本文用一个具体的结果返回场景说明提前返回为何造成泄漏,并给出取消发送、容量为一的缓冲和通道所有权边界的处理方式。108 收藏 -
Golang · Go问答 | 2个月前 | 微服务 · Redis · postgresql · go · 性能优化 · Redis连接池 Go连接池 PostgreSQL连接池 context超时 并发预算
一个 Go 接口同时查 Redis 和 PostgreSQL 时,连接池参数不能照搬默认值。本文从请求并发、缓存命中率和数据库连接上限出发,拆开两套连接池与 context 超时预算,给出可复现的配置、指标和回退判断。107 收藏 -
Go 1.25 将 testing/synctest 正式带入标准库,测试超时、定时器和并发协作时不必再真实等待。本文用一个带 deadline 的通知流程说明 synctest.Test、synctest.Wait、时间推进和版本兼容边界。107 收藏 -
context.WithValue 适合传递贯穿请求链的元数据,不适合替代函数参数或承载业务配置。本文用键类型、取值失败和测试隔离三个边界,说明什么时候该用、什么时候该拆出显式参数。107 收藏 -
Go 的 t.Setenv 会修改整个测试进程的环境,并在测试结束后恢复,因此当前测试或并行父测试存在时会被禁止。本文解释测试树中的冲突边界,并比较串行测试、配置注入和独立进程三种处理方式。107 收藏 -
io/fs 使用统一的斜杠逻辑路径,操作系统文件 API 却需要本地路径。本文用 fs.ValidPath、filepath.Localize 和 filepath.Join 说明如何安全转换,并解释 Clean、FromSlash、ToSlash 的边界。107 收藏 -
Go 的 ResponseWriter 会在首个 Write 或 WriteHeader 时提交响应头,之后再修改 Header 或状态码通常不会生效。本文用 ServeHTTP 示例说明正确顺序、错误分支和特殊边界。107 收藏 -
讲清 Go base64.NewEncoder 的尾部缓冲、Close 刷新和 Writer 错误传递,给出基于 io.Copy 的流式编码写法。107 收藏 -
用 Go testing.T.Deadline 取得测试总截止时间,在昂贵准备前判断剩余预算,并通过 context.WithDeadline 让可取消的准备工作及时停止。107 收藏 -
Go os.Rename 在 Unix 与 Windows 下对打开文件的处理不同。本文用同目录临时文件、句柄关闭、进程内读写锁和有限重试,设计不删除旧文件的跨平台替换方案。107 收藏 -
Go bufio.Reader 处理超长行时,关键是识别 ReadLine 的 isPrefix 语义并复制拼接片段;普通按行读取可用 ReadString 或 ReadBytes,同时设置单行大小上限,避免把缓冲片段误当成完整记录。107 收藏 -
Golang · Go教程 | 1个月前 | 文件处理 · 错误处理 · Go教程 · FieldsPerRecord ParseError Go encoding/csv CSV注释行 csv.Reader.Comment
Go encoding/csv 的 Reader.Comment 可以忽略行首直接出现注释字符的整行内容,再配合逐条 Read、FieldsPerRecord 和 ParseError 处理,把注释行、空行、有效记录与格式异常分开。107 收藏 -
Go 的 mail.AddressParser 可通过 mime.WordDecoder.CharsetReader 解析 RFC 2047 自定义字符集显示名。本文给出字符集白名单、UTF-8 转换、单地址与列表解析、错误回退和核对方法。107 收藏 -
Go 模块代理返回 404 和 410 时,命令通常都会按 GOPROXY 顺序回退;真正需要排查的是请求资源、分隔符和其他终止错误。本文用下载命令拆开判断路径。107 收藏 -
Golang · Go问答 | 1星期前 | 并发安全 · goroutine · Go问答 · Go结构化并发 runtime/secret并发读取 secret.Do goroutine Go密钥生命周期 WaitGroup敏感数据
runtime/secret 会让作用域内新建的 goroutine 继承秘密模式,但不会替你同步共享切片。本文用结构化并发说明密钥只读共享、worker 独立状态、公开结果复制、取消等待与平台降级的正确边界。107 收藏