Go语言技术文章
-
Go 泛型约束并不会自动继承所有类型实参的方法。本文用类型集、方法集和指针接收者示例说明哪些调用能写、哪些必须补进约束。244 收藏 -
sync.Pool 适合复用短生命周期对象,但不适合无上限地保留大缓冲区。本文用容量阈值、Put 前清理和堆画像检查,给出一套避免大对象长期留池的 Go 写法。242 收藏 -
Go 反射调用 Set 失败,先不要把问题归因于类型不匹配。ValueOf 的值拷贝通常不可寻址,指针解引用后才可能获得可设置值;未导出字段和 MapIndex 还有额外边界。本文用 CanAddr、CanSet、Elem 和最小示例快速定位。396 收藏 -
Go 反射访问未导出字段时,Value.Interface 会因封装边界触发 panic。本文用 CanInterface 判断访问能力,并给出类型化读取、公开方法和 DTO 拷贝的选择。330 收藏 -
用 Go sync.OnceValue 封装一次性初始化函数,理解并发调用、返回值缓存、panic 复现以及与 OnceValues、sync.Once 的选择边界。396 收藏 -
用一个泛型集合示例说明 Go iter.Seq 的 yield 回调约定、range 提前停止、go.mod 语言版本和 single-use 迭代器边界。294 收藏 -
Go 的 sql.DB.Ping 只能说明连接探活成功,不能替代真实 SQL、权限、事务和连接池检查。本文给出分层排查与健康检查设计方法。466 收藏 -
用 S ~[]E 接收普通或命名切片,再通过 func(E) R 做逐元素转换;同时说明数值类型参数可以显式转换,但 []E 不能整体隐式变成 []R。233 收藏 -
SetMaxOpenConns(1) 会把所有需要数据库连接的并发操作压到单车道,吞吐下降通常来自连接获取等待。本文用 DBStats 区分排队与 SQL 慢,并给出连接池调参方法。137 收藏 -
说明 Go reflect.StructOf 适合的动态字段场景,演示如何用 StructField、JSON 标签和 reflect.New 创建可写运行时结构体,并梳理导出字段、嵌入方法与类型缓存边界。423 收藏 -
Go 的 sql.DB 是连接池句柄,而 sql.Tx 绑定事务连接。事务内部如果继续调用 DB.Query,查询可能落到另一条连接,读不到未提交数据。本文说明边界、改法与回滚收口。316 收藏 -
Go 里接口自身为 nil 与接口持有 typed nil 不是一回事,reflect.ValueOf(nil) 还会得到无效 Value。本文给出带 IsValid 和 Kind 防护的安全判断函数,避免反射判断直接 panic。105 收藏 -
Go database/sql 中,rows.Close 后仍可调用 rows.Err。本文区分迭代错误、扫描错误和驱动关闭错误,给出读取型查询与提前关闭时不丢错的写法。136 收藏 -
用 Go encoding/hex 把固定长度字节稳定编码为统一小写、可排序比较的字符串,解释 [N]byte、前导零、长度公式和文本比较的边界。175 收藏 -
Go 的 database/sql 中,QueryRow 没有记录不会立即返回错误,而是把结果放进占位 Row,直到 Scan 才返回 sql.ErrNoRows。本文说明延迟错误的原因、错误分支、NULL 字段和多行查询的选择。206 收藏