Go语言技术文章
-
Go time.After 放在 select 循环里会在每轮创建新的 Timer。本文解释持续就绪分支下的定时器积压、Go 1.23 的垃圾回收变化,以及如何用一个可复用的 time.Timer 配合 Stop、排空和 Reset 降低分配压力。143 收藏 -
Go io.ReaderAt 的短读不能简单当成失败或成功。本文说明如何保留 n 个有效字节,区分正常尾部 EOF、固定块中途 ErrUnexpectedEOF 与底层 I/O 错误,并封装安全的定长读取函数。143 收藏 -
用 net.ListenConfig.Control 在监听 socket 绑定前设置底层参数,再把批处理循环里的缓冲区复用与结果容量规划分开处理,避免把两类性能问题混成一个开关。143 收藏 -
go/types.Interface.IsMethodSet 用来判断接口是否完全由方法集描述。返回 true 的是普通 basic interface,返回 false 的接口包含类型元素或类型集合,只适合作为泛型约束。本文给出类型检查后的判定代码和迁移注意事项。143 收藏 -
Go 读取大文件的固定偏移数据时,可以用 os.File.ReadAt 直接写入目标缓冲区,不必把整个文件载入内存。本文说明 offset、短读、EOF、范围检查以及可复用的固定窗口读取写法。143 收藏 -
Go net/http 客户端不会把 Authorization 无条件带过重定向。本文说明跨域后敏感头为何被清除,并用 CheckRedirect 限制跨源跳转、处理响应体和错误。143 收藏 -
使用 Go mod graph 精确筛选目标模块的全部父依赖,并结合 go list -m 与 go mod why 区分版本要求、实际选中版本和包导入路径,说明依赖调整前后的记录方法与升级判断边界。142 收藏 -
使用 slices.IndexFunc 按谓词查找切片的首个匹配元素,重点说明索引返回值、未命中时的 -1,以及空切片的安全处理。142 收藏 -
Go filepath.Match遵循目标操作系统规则。本文通过反斜杠差异、单文件名筛选函数及预期用例,解释整串匹配、大小写和ErrBadPattern,并区分模式命中与跨平台文件名合法性。142 收藏 -
gofmt 在不同 CPU 架构上出现列对齐差异,通常是格式化器对齐决策的实现差异。本文说明 Go 1.27 的修复范围,并给出统一工具链、提交检查和升级处理方法。142 收藏 -
Go strings.IndexRune 返回的是 Unicode 字符在 UTF-8 字符串中的首个字节偏移,而不是字符序号。本文说明 -1、0、utf8.RuneError 和非法 UTF-8 的边界,并给出安全切片与删除多字节字符的写法。142 收藏 -
Go fuzz 测试读取相对路径文件失败,通常不是 fuzz 引擎改变了规则,而是相对路径基准与预期不一致。本文说明 go test 的包目录语义、testdata 夹具布局、fuzz 回调的并发边界,以及 go:embed 和显式绝对路径的取舍。142 收藏 -
使用 Go AST 重写源码时,astutil.DeleteImport 可以按导入路径删除 import 声明。本文说明 parser.ParseFile、token.FileSet、format.Node 的配合方式,以及返回值、别名和重复导入边界。142 收藏 -
Go x/image/font/opentype 的 Hinting 会影响矢量字形节点如何落到像素网格。本文对照 HintingNone、HintingVertical 和 HintingFull,说明小字号变形的原因与排查顺序。142 收藏 -
Go gofpdf 中,SetMargins 负责左、上、右三侧的内容边界,SetAutoPageBreak 的 margin 负责距离页底的自动分页触发线。本文用页面模型和最小代码说明两者的区别、组合方式与常见误区。142 收藏