Go语言技术文章
-
HostLayout 约束的是 Go 结构体在当前主机上的内存布局,不是跨平台、跨进程或长期存储的字节协议。本文从一个布局误用场景拆解原因,并用 encoding/binary 演示如何显式指定字段宽度与字节序。393 收藏 -
用 Go 的 go/parser.ParseFile 解析单文件源码,保留注释并从 ast.File 读取包名、声明和文档字段,同时说明 FileSet、语法错误与完整包分析的边界。393 收藏 -
Go 1.20 起可以用 FileSet.RemoveFile 移除不再使用的文件,降低长驻源码分析工具持续积累的文件位置表内存。本文说明位置引用、AST、诊断文本与 FileSet.Base 的迁移边界。393 收藏 -
Golang · Go教程 | 2个月前 | 并发 · 错误处理 · go · Context · context.WithTimeout context.Cause Go context.WithCancelCause
用一个可运行的 Go 请求链示例说明 context.WithCancelCause 如何区分主动取消、超时和上游失败,并给出错误判断、日志记录与兼容旧代码的检查方法。392 收藏 -
Go vet 默认只启用高置信度检查,shadow 变量遮蔽分析由 golang.org/x/tools 单独提供。本文解释它没有默认启用的原因、内外层 err 的风险、固定版本运行命令,以及接入 CI 时如何处理误报。392 收藏 -
用 go list -deps -json 导出当前构建条件下的包级依赖闭包,再通过 Imports 反查间接依赖的直接来源,并说明 DepOnly、Deps、构建标签和错误对象的边界。392 收藏 -
Go context.Value 适合携带请求级、跨 API 传播的元数据,不适合传业务参数或可选配置。本文用私有键类型、类型安全访问器和调用链示例划清使用边界。392 收藏 -
动态轮询任务需要调整周期时,活跃的 time.Ticker 直接调用 Reset;真正暂停后恢复则重新创建 ticker。本文结合控制消息说明 Stop、Reset 与 C 通道的生命周期边界,以及如何避免重复 ticker 和错误等待。392 收藏 -
sync.Map.Range 能遍历当前可见的键值,但它不提供一致性快照。本文用并发缓存盘点示例说明 Store、Delete 与 Range 的可见性边界,并给出锁、版本号和独立快照三种更可靠的判断方式。392 收藏 -
Go bufio.Scanner 默认按行返回文本,空行会返回空字符串。本文用一个可复用的段落聚合流程处理普通行、连续空行、EOF 和读取错误,并说明严格空行与空白行的区别。392 收藏 -
Golang · Go问答 | 4星期前 | CGO · 内存管理 · Go问答 · 排错 · Go Go指针 CGO runtime/cgo.Handle C指针 runtime.Pinner cgocheck
Go cgo 指针检查的关键不是把 unsafe.Pointer 换成别的类型,而是确认内存归属、内部是否含 Go 指针以及 C 保存地址的时长。本文对比临时借用、C 内存复制、runtime/cgo.Handle 和 runtime.Pinner 的适用边界。392 收藏 -
Go 1.27 扩展了泛型函数的上下文推导:当赋值目标是明确的非泛型函数类型时,可以从目标签名推导类型参数。本文用函数赋值、切片字面量、类型转换和通道发送说明可推导边界。392 收藏 -
Go bytes.Runes 会把 UTF-8 字节切片解释为 Unicode 符文并返回 []rune。本文从基础转换、长度单位、非法 UTF-8 和字符边界几个方面说明如何安全使用。392 收藏 -
Go 1.22 改变了 for 循环变量的创建方式,但循环外变量、旧模块和延迟回调仍可能共享同一个值。本文说明闭包捕获边界,并给出显式传值和当前值副本的稳妥写法。392 收藏 -
time.Duration 以 int64 纳秒保存,和整数相乘时不会自动报告溢出。本文从边界值、四种符号组合和 MinInt64 特例出发,给出乘法前检查并返回 overflow 标记的安全写法。392 收藏