Go语言技术文章
-
Go 的 panic 沿当前 goroutine 调用栈展开,recover 只有在同一 goroutine 的 deferred 函数中直接调用才会生效。本文用原创示例说明错误位置、保护函数和 channel 传递边界。434 收藏 -
Go 的 encoding/csv 支持把引号字段中的换行保留为同一条记录。本文说明正确的 CSV 写法、csv.Reader 的读取方式、字段数配置,以及如何用 ParseError、FieldPos 和 InputOffset 定位坏数据。434 收藏 -
Go 里把 WaitGroup.Add 写进 goroutine,会让 Wait 有机会在计数建立前先返回。本文用时序拆解根因,给出 Add、Done、Wait 的安全写法,并说明嵌套任务和 WaitGroup.Go 的边界。434 收藏 -
Go sync.Once.Do 内部函数发生 panic 后不会自动重试;本文用调用计数、recover 和对比表说明 Once、OnceFunc 与显式重试状态机的边界。434 收藏 -
用 Go regexp 的命名捕获组解析日志字段,按 SubexpNames 建立索引映射到结构体,并处理匹配失败、空组和重复组名。434 收藏 -
用 Go 的 io.MultiReader 把多个 Reader 顺序拼成一个输入流,掌握 EOF、错误传播、分隔符和底层资源关闭的边界。434 收藏 -
Go encoding/xml 解码 XML 时,前缀只是文档别名。本文用 xml.Name.Space 和 Local 说明如何按命名空间 URI 稳定判断元素,并比较 Token 级解析与结构体标签的适用边界。434 收藏 -
用 Go net/textproto 读取原始 HTTP 风格请求头,掌握 ReadMIMEHeader、重复字段、续行、键名规范化和输入长度边界。434 收藏 -
crypto/subtle.ConstantTimeSelect 只接受 0 或 1,并在两个候选整数之间做固定时间选择。本文用 ConstantTimeEq 生成选择值,解释它适合保护什么、不能替代哪些安全边界,以及如何用测试核对结果。433 收藏 -
自签名 CA 或内网证书接入 Go 客户端时,握手失败往往不是服务端证书坏了,而是根证书没有进入本次 Verify 使用的证书池。本文从系统根证书池、NewCertPool、AddCert 到 Verify 串起一条可运行的证书链校验路径。433 收藏 -
Go 的 rows.Next 返回 false 不一定代表结果集正常读完,也可能是迭代期间发生了错误。本文用最小可用代码拆开 QueryContext、Scan、Err 和 Close 的判断边界,说明如何避免把超时、驱动错误误判为空结果。433 收藏 -
保存时用 goimports 自动整理当前 Go 文件,提交和 CI 再用 gofmt -l、goimports -l 做只读门禁。本文说明两者职责、保存脚本、检查命令、生成文件边界和常见失败原因。433 收藏 -
Go 的 csv.Reader 开启 ReuseRecord 后,Read 返回的记录可能共享底层数组。本文解释上一条记录被改写的原因,并给出即时处理、复制保存和 EOF 错误处理的安全写法。433 收藏 -
os.OpenFile 的 O_CREATE 只负责文件不存在时创建,不提供独占创建保证。并发生成同一文件时,应使用 O_CREATE|O_EXCL,并处理 os.ErrExist、部分写入和读取时机。433 收藏 -
Go 项目已经生成 vendor,编译却仍访问模块代理,通常不是 vendor 目录失效,而是 -mod 参数、GOFLAGS、go.mod 版本门槛或 vendor/modules.txt 不一致。本文按检查顺序给出定位和修复方法。433 收藏