Go语言技术文章
-
Go Transport 配置看似未生效,需区分旧实例归属、连接复用和配置作用阶段。结合客户端工厂与顺序切换示例,说明不可变配置、响应体排空、闲置连接回收及热更新的失败边界。269 收藏 -
Go 中无缓冲 channel 的发送必须等接收方出现;如果调用方提前 return,发送 goroutine 就可能永久阻塞。本文用最小示例解释泄漏原因,比较缓冲与取消方案,并给出 goroutineleak/pprof 的排查思路。269 收藏 -
从 Shutdown 的等待语义、活跃请求、慢操作和长连接边界出发,定位 Go HTTP 服务退出迟迟不返回的原因,并给出带超时的退出编排方式。269 收藏 -
连续调用 Go json.Decoder.Decode 时,io.EOF 表示没有下一个顶层 JSON 值,不等于输入损坏。本文区分正常收尾、空白尾部、截断 JSON、语法错误和类型错误,给出可复用的判断分支。269 收藏 -
Go time.NewTimer 的关键不在于记住一段固定模板,而在于区分提前取消、已经触发和再次复用。本文用请求超时场景说明 Stop、Reset、C 的配合方式,并补充 Go 1.23 及以上与旧版本的差异。269 收藏 -
range over function 是 Go 1.23 才支持的语言语法。本文用最小迭代器示例说明旧版编译器为何无法靠升级依赖获得这项能力,并给出升级工具链、callback 回退和构建约束的选择。269 收藏 -
Go database/sql 的 DB.Stats 会累计记录连接池等待次数和等待时长。本文说明 WaitDuration 的真实含义,如何用两个快照计算窗口增量,以及怎样把连接池排队和 SQL 执行慢分开判断。269 收藏 -
Go 的普通 uint64 乘法只保留固定宽度结果。本文用 math/bits.Mul64 拆出 128 位乘积的高、低 64 位,给出可复用封装、溢出判断、结果格式化和边界说明。269 收藏 -
Go 的 G[int] 只有一个方括号表达式,解析器会把它表示为 ast.IndexExpr;只有逗号分隔的多个参数才使用 IndexListExpr。本文说明两类节点的字段差异,以及如何用 go/types.Info.Instances 补充泛型语义。269 收藏 -
Go 的 encoding/csv 不负责字符集转换。本文用 golang.org/x/text/encoding/japanese 和 transform.NewReader,把 Shift_JIS 字节流先解码成 UTF-8,再交给 csv.Reader 流式读取。269 收藏 -
Go 1.23 引入 iter.Seq 后,可以把过滤逻辑封装成惰性迭代器。本文从 yield 控制出发,演示多个过滤条件如何组合,以及下游返回 false 时怎样让上游及时停止。268 收藏 -
Go JSON 时间字段解析失败,应先区分 JSON 类型、RFC3339 格式与时区契约。结合标准字段和旧格式输入示例,说明 ParseInLocation、空值、必填检查及常见格式误区。268 收藏 -
Go sync.Pool 适合缓存短生命周期、可安全丢弃的临时对象。本文用 bytes.Buffer 示例说明 Get 后覆盖、使用中独占、Put 前 Reset,以及切片引用和异步访问的生命周期边界。268 收藏 -
不同包的同名未导出字段具有不同名称身份。通过 go/types 对照例子,说明 Name、Id、Identical 的职责,以及包路径、字段标签和符号集合一致性。268 收藏 -
Golang · Go教程 | 1天前 | 标准库 · 源码分析 · Go教程 · Go ast go/ast go/types parser.ParseFile ast.Ident ast.NewIdent 源码生成
Go ast.NewIdent 用一个名称创建 *ast.Ident,适合拼装源码生成所需的标识符节点。本文从一次位置为空的故障复盘出发,说明 Name、Pos/End、Obj 分别代表什么,以及什么时候应该改用 parser.ParseFile、token.FileSet 和 go/types。268 收藏