Go语言技术文章
-
Go net/http 的 Server.Protocols 为空时采用默认协议集合;如果服务端只需要 HTTP/1,应显式创建 http.Protocols 并调用 SetHTTP1(true),不要把 nil 配置误认为仅 HTTP/1。本文说明配置写法、集合语义和常见误区。244 收藏 -
Go slices.BinarySearchFunc可在自定义顺序中查找,前提是排序与查询比较语义一致。通过分数降序的结构体示例,说明整数目标、重复键、未命中插入位置和顺序维护。244 收藏 -
Go Timer Stop 后仍收到事件,先看 Stop 返回值、Go 版本和 C 通道的接收者。本文说明旧版本的非阻塞排空、Go 1.23 之后的同步语义,以及 Reset、多个接收者和 AfterFunc 的处理边界。244 收藏 -
Go unicode/utf8.RuneLen 返回单个 rune 编码成 UTF-8 所需的字节数:正常值为 1 到 4,非法 Unicode 值返回 -1。本文区分 RuneLen、len 和 RuneCountInString,并说明 RuneError 与非法 rune 的边界。244 收藏 -
Go 本地 replace 不生效时,应核对主模块、模块身份、版本范围、本地目录基准及 go.work 覆盖。本文用双模块联调配置说明排查方法和迁回正式依赖前的收尾事项。244 收藏 -
Go database/sql 的 Scan 把数据库 NULL 作为 nil 传入,直接接收为普通 string 会因无法表达空值而报错。本文对比 sql.NullString、sql.Null[string] 与 COALESCE 的适用边界。244 收藏 -
Go os.Pipe 可以把一个进程的标准输出接到另一个进程的标准输入。本文从一个小型命令管道出发,说明读写端方向、Cmd 生命周期、关闭时机,以及结果为空和等待不返回的常见原因。244 收藏 -
Go ast.NewCommentMap 不会重新读取源码。结果为空时应先确认 ParseComments 是否启用及 file.Comments 是否有内容,再区分位置上下文、节点范围和文档注释字段。244 收藏 -
Go Expr 规则访问可选指针字段时,先用 nil 条件保护成员访问,再复用编译后的 program;同时区分 Compile、Run、未定义变量和关闭短路的边界。243 收藏 -
Go 日志在容器里延迟出现,通常不是一个笼统的“Go 有缓冲”问题。本文沿着 log/slog 的 handler、stdout/stderr、容器日志流和采集器批量策略逐段定位,并给出不增加无谓缓冲的修复方式。243 收藏 -
Go pprof CPU 图没有业务函数,通常不是 pprof 失效,而是采样窗口没有覆盖业务 CPU、符号化没有拿到匹配二进制,或过滤参数把业务节点隐藏。本文按资产、风险链路和复查动作给出排查顺序。243 收藏 -
Go context deadline exceeded 只能说明当前上下文因截止时间结束,不能直接定位来源。本文用 WithTimeoutCause、context.Cause 和 errors.Is 区分本地总预算、上游阶段预算与更上层请求超时。243 收藏 -
SQLX Select 会把查询结果逐行映射并追加到目标切片,结果规模没有上限时会放大内存、对象和连接占用。本文说明 Select 的真实语义,并给出分页与 Queryx 加 StructScan 的取舍。243 收藏 -
用 Go archive/zip.FileHeader.SetMode 把文件模式写入 ZIP 条目,配合 CreateHeader 创建归档,并说明解压端读取权限、Unix 元数据和跨平台边界。243 收藏 -
filepath.Rel 只计算 basePath 与 targPath 的词法相对关系,不会自动阻止目标路径越出根目录。本文用 Go 示例说明如何处理返回错误、判断 .. 或 ../ 越界结果,并解释 Clean 与符号链接带来的边界。243 收藏