Go语言技术文章
-
Go replace 指向本地目录后 CI 找不到依赖,通常是替换路径在干净 runner 中不可见。本文用相对路径、go.work 和可访问模块三种方案说明如何修复,并给出提交前的反向检查。448 收藏 -
解释 Go go:linkname 与普通 import 的区别,定位 Go 1.23 标准库内部符号链接失败的原因,并给出公开 API、handshake 与最小验证建议。448 收藏 -
用 Go 的 net/netip Prefix.Masked 把带主机位的 CIDR 统一成稳定网段键,并说明无效前缀、IPv4 与 IPv6 的处理边界。448 收藏 -
讲清 Go crypto/tls Config.MinVersion 的最低版本语义,比较 MinVersion 与 MaxVersion 的范围配置,并用 ConnectionState 判断实际协商结果。448 收藏 -
围绕 Go database/sql Tx 讲清异常路径统一回滚的写法:用 defer 兜底、事务内统一使用 Tx、正确处理 Commit 错误,并给出资源释放检查清单。448 收藏 -
Go 使用 os.File 更新配置或状态文件时,先在同目录临时文件中完整写入并 Sync,再关闭文件并 Rename,既避免半文件,也能清楚区分原子替换与断电持久化边界。448 收藏 -
Go 的 go build -tags 支持以逗号分隔的方式指定多个构建标签(如 -tags=dev,sqlite,debug),从而精确控制哪些带 // +build 或 //go:build 约束的源文件参与编译;空格分隔方式已被弃用。 Go 的 `go build -tags` 支持以逗号分隔447 收藏 -
Golang · Go教程 | 3星期前 | goroutine · pprof · Go教程 · 运行时 · Go label runtime/pprof Do ForLabels goroutine 归因
线上 CPU profile 只能告诉你哪里忙,却不一定能说明是哪类任务在忙。本文用 runtime/pprof 的 Label、Do、ForLabels 和 SetGoroutineLabels 给请求打上可检索的任务标签,并说明标签继承、覆盖、读取和采样查看的边界。447 收藏 -
Go 程序放进容器后,runtime.GOMAXPROCS 返回的并发上限和宿主机核数不一定相同。本文用运行时探针区分逻辑核、CPU 配额与调度上限,解释容器内核数判断的边界,并给出可复现的检查代码。447 收藏 -
高频日志过滤不要在每条日志到来时重新解析正则。本文用一个小型过滤器演示 regexp.Compile 的初始化时机、*regexp.Regexp 的并发复用,以及动态改规则时如何隔离可变配置。447 收藏 -
Go 泛型约束里的 int 只匹配具体类型,~int 匹配底层类型为 int 的命名类型。本文用 type Score int、类型别名和泛型函数说明两者的选择边界。447 收藏 -
Go 用 io.CopyN 从网络连接复制固定块时,完整条件不是只看错误是否为空;本文说明如何设置 SetReadDeadline,结合 written、io.EOF 和 os.ErrDeadlineExceeded 处理半包、总时限与空闲超时。447 收藏 -
对比 Go strings.CutPrefix 与 strings.TrimPrefix 的返回值和适用场景,说明何时需要 found 判断、何时只需得到去掉前缀后的字符串,并补充空前缀、大小写和旧版本兼容边界。447 收藏 -
Go 使用 sql.NullString 扫描可空文本列时,必须同时判断 String 和 Valid。本文用表格、代码和排查清单说明如何区分 NULL、空字符串与普通文本,并正确写回数据库。447 收藏 -
解释 Go encoding/xml Decoder.Strict=false 对缺失结束标签、异常实体和命名空间的实际影响,并说明 AutoClose、Entity 的配置边界与生产选择。447 收藏