Go语言技术文章
-
bbolt.Open 默认会等待数据库文件锁,数据库已被其他进程占用时可能长期不返回。本文说明如何设置 Options.Timeout,识别 ErrTimeout,并处理 Close、重试和残留进程等边界。411 收藏 -
固定正则表达式不要在每次请求中重复编译:本文用 Go regexp 说明初始化复用、并发读取、动态表达式缓存和错误边界。411 收藏 -
Go bufio.Reader.ReadLine 返回 isPrefix 并不表示读取失败,而是说明当前 line 只是长行的一段。本文用原创 Go 示例说明如何拼接片段、处理 EOF 与 CRLF,并封装单行读取接口。411 收藏 -
Go time.Parse 出现差几个小时,通常不是时间被随机改写,而是输入中的时区信息与解析 API 的默认语义不一致。本文对比数字偏移、时区缩写、ParseInLocation 和 Time.In 的使用边界。411 收藏 -
bufio.Reader.UnreadRune 不是任意读取后的通用回退按钮,它只接受紧邻 ReadRune 的一次回退。本文从源码状态、ErrInvalidUnreadRune 触发条件和 UTF-8 解析示例说明严格配对规则。411 收藏 -
Go 中不要用文件后缀猜测打开对象的类型。本文用 os.File.Stat 获取 FileInfo,再通过 Mode 的 IsDir 和 IsRegular 判断目录、普通文件及其它类型,同时处理 Stat 错误和文件句柄关闭。411 收藏 -
用 Go os.ReadDir 按文件名获得稳定目录顺序,并通过 DirEntry.Type 跳过符号链接;同时解释 File.ReadDir 的目录顺序和分批读取边界。411 收藏 -
Go http.Server.ErrorLog 的类型是 *log.Logger,适合接收连接错误、Handler 异常和底层文件系统错误。本文用并发安全的 io.Writer 适配器把标准库消息输出为 JSON 行,并区分访问日志与 ConnState 的职责边界。411 收藏 -
Go tar 解包应分别处理条目名与链接目标。本文采用默认拒绝链接的严格策略,用 os.Root 与私有暂存目录限制实际写入,并说明词法检查、平台差异及资源预算边界。411 收藏 -
Go runtime/trace.NewTask 为跨函数、跨 goroutine 的逻辑工作流创建携带 task 的 context,再用 Log、WithRegion 和 Task.End 组织执行追踪。本文只讲任务边界、上下文传播和结束时机,不展开 pprof 性能剖析。411 收藏 -
Go billy 的 memfs 可以通过 Filesystem.Chroot 把 workspace 变成相对路径工作根。本文用最小 Go 示例说明如何创建、读写文件,并处理不存在目录、越界路径和 v5/v6 导入差异。410 收藏 -
Go 的 filepath.Glob 只会把模式语法错误报告为 ErrBadPattern,无匹配通常是 nil、nil,目录读取等文件系统错误则会被忽略。本文从批处理中的误判现场出发,讲清三种结果如何区分、如何复现和怎样设计错误分支。410 收藏 -
用 Go 标准库 maps.Clone 复制 map,区分 map 容器独立与切片等 value 仍共享底层数据的边界,并给出可验证的复制方案。410 收藏 -
Go embed.FS 默认保留嵌入目录的完整路径;用 io/fs 的 fs.Sub 可以把某个子目录包装成可复用的 fs.FS 根,让模板、静态资源和通用读取代码只处理根内相对路径。本文说明初始化、下游接入、路径边界和回滚方式。410 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · Go问答 · Go net/http ResponseController ErrNotSupported SetReadDeadline SetWriteDeadline
Go HTTP 服务端调用 ResponseController 设置读写 deadline 时,如果返回未支持错误,通常不是 deadline 参数写错,而是当前 ResponseWriter 或包装链没有暴露对应能力。本文说明如何用 errors.Is 判断 ErrNotSupported、修复 Unwrap 包装器,并为不支持连接 deadline 的场景保留安全降级方案。410 收藏