Go语言技术文章
-
在 Go 静态分析中,类型别名不能只按 Named 类型处理。本文用 go/types.Alias.Rhs 读取 type A = R 的右侧类型,并说明 Alias、别名链与 types.Unalias 的边界。477 收藏 -
reflect.Value.IsValid 判断反射值是否存在,reflect.Value.IsZero 判断有效值是否等于其类型零值。本文用 nil 接口、带类型 nil 指针和 reflect.Zero 拆开两者边界,并给出安全调用顺序。477 收藏 -
Go JSON 解码到 interface{} 时数字默认会变成 float64。本文比较明确目标类型、UseNumber 和展示型字符串三种选择,帮助你避免大整数精度丢失。477 收藏 -
Go Expr结构体环境需同时用于编译契约与运行数据。通过任务筛选示例说明expr.Env、字段标签、方法调用、AsBool及错误处理,并区分业务false与求值失败。477 收藏 -
Go 的 httptest.ResponseRecorder.Flushed 只表示 Handler 是否调用过 Flush。本文用最小测试拆开未调用 Flush、断言过早、ResponseWriter 包装和真实网络缓冲的区别。477 收藏 -
math/big 的 Int 运算通常不会像机器整数一样溢出,异常多出现在 Int64/Uint64 转换、big.Float 精度舍入或接收者复用。本文给出一套可检查的定位方法。477 收藏 -
Go 测试包中 embed 文件读不到时,先区分编译期模式匹配、embed.FS 内部路径和 os.ReadFile 工作目录三个边界,再用 go list 查看 TestEmbedPatterns 与 XTestEmbedPatterns,快速定位测试资源归属。477 收藏 -
Go context.WithDeadline 派生子上下文时,deadline 只能更早不能延后。本文用原创示例说明父子截止时间、cancel 释放、Err 判断和多层预算的边界。477 收藏 -
runtime.GOMAXPROCS 限制的是同时执行用户级 Go 代码的并行度,不是操作系统线程总数。本文用 G、P、M 和阻塞系统调用说明线程数为何可能高于设置值,并给出容器与本地程序的排查顺序。477 收藏 -
Go select 可以用 nil channel 动态屏蔽一个通信分支:初始设为 nil,启用时切换为有效 channel,停用或关闭后再置 nil。本文说明 select 的重算边界、关闭处理和 default 常见坑。477 收藏 -
用 Go 的 encoding/hex 把二进制 ID 转成稳定的小写十六进制文本,并说明 DecodeString 的输入边界、错误处理和预分配写法。477 收藏 -
解释 Go net.IP.Equal 如何处理 4 字节 IPv4 与 IPv4-mapped IPv6,结合 To4 和 16 字节表示说明比较、规范化与边界判断。477 收藏 -
在 Go 的 text/template 模板里,条件语句(比如 {{if}})两侧通常会把原本的换行符一并保留下来,所以渲染结果里很容易莫名多出几行空白;想把这类空白控制住,就得用 {{-(左去空白)和 -}}(右去空白)这套语法,按位置精确裁掉多余字符,让最终输出更紧凑,也不会夹带冗余换行。 在477 收藏 -
Golang · Go教程 | 9小时前 | 标准库 · unicode · utf-8 · Go教程 · Go 文本处理 unicode unicode/utf8 组合字符 unicode.IsMark
Go 标准库可以在规范化前识别 Unicode 组合标记:先检查 UTF-8,再按 rune 解码并记录字节边界,最后用 unicode.IsMark 标记 M 类字符。本文还说明预组合字符、孤立标记和字素簇之间的边界。476 收藏 -
Golang · Go问答 | 1天前 | 连接池 · 性能排查 · database/sql · Go问答 · Go 连接池 MaxOpenConns MaxIdleConns database/sql sql.DB DB.Stats
Go database/sql 连接池等待过久时,先看 DB.Stats 的 WaitCount、WaitDuration、InUse 和 MaxOpenConnections,再检查 MaxOpenConns、MaxIdleConns、空闲与生命周期回收以及 Context 超时。本文给出一套按信号排查和小步调参的方法。476 收藏