Go教程技术文章
-
用 Go database/sql 调用带 OUT 或 INOUT 参数的存储过程时,掌握 sql.Out、Dest 和 In 的绑定关系,配合 ExecContext 与驱动能力排查,避免输出值无法回写。330 收藏 -
Go 的 csv.Writer 会缓冲每条记录,Flush 只是把缓冲内容交给底层 io.Writer,真正的写入错误要通过 Error 读取。本文从旧写法的风险出发,给出同时处理 Write、Flush 和 os.File.Close 的 CSV 导出收尾方式。330 收藏 -
用 Go 泛型拆解 type set、~底层类型与方法集的关系,说明为什么约束能参与类型运算却不一定能直接调用方法,并给出可编译的设计与验收方式。329 收藏 -
Go 1.23 引入的 unique.Make 可以把可比较值规范化为 Handle。本文从最小写法、map 去重、类型约束和生命周期四个方面说明如何正确复用唯一实例。329 收藏 -
Go 的 os.Chown 接收路径、uid 和 gid,用于修改 Unix 文件或目录的数字所有者信息。本文说明 -1 保留参数、符号链接与 Lchown 的差别、权限错误处理和 Windows/Plan 9 平台边界。329 收藏 -
Go JetStream 发布返回 PubAck 后,Duplicate=true 表示服务端按消息标识识别为重复发布,不等于消费端已经确认。本文用 nats.go 说明 WithMsgID、Stream、Sequence 和错误分支的实际边界。329 收藏 -
Go bufio.Scanner 默认按行切分,空行会作为长度为零的 token 返回;循环结束后要检查 Err 区分正常 EOF、底层读取错误和 token 过长。本文给出空行策略、Buffer 配置和按行读取代码的迁移清单。329 收藏 -
Go fmt.Appendf 可以把格式化结果直接追加到已有 []byte,减少 fmt.Sprintf 先生成字符串再 append 的中间路径。本文从缓冲区复用、容量准备、专用追加函数和基准测试讲清适用边界。329 收藏 -
bytes.Buffer.Bytes 返回的是与缓冲区内容共享底层数组的切片。本文按数据生命周期说明什么时候可以直接读取,什么时候要用 append 复制成独立副本,并排查后续 Write、Reset、Truncate 和并发访问造成的覆盖误判。329 收藏 -
讲清 Go time.Timer 复用时 Stop、Drain 和 Reset 的调用边界,并区分 Go 1.23 新语义与旧版本写法,用最小循环和检查清单避免旧值、阻塞与并发复用问题。328 收藏 -
Go 1.26 中实际使用的是 runtime/debug.SetCrashOutput。本文用独立文件接收未恢复 panic 与致命错误输出,说明文件描述符复制、覆盖旧目标和关闭时序的边界。328 收藏 -
Go 动态查询不知道列数时,用 Columns 创建接收槽位,以 *any 安全处理普通值与 NULL,再结合 ColumnTypes 和 rows.Err 完成通用扫描。328 收藏 -
讲清 Go sync.Cond 的可靠等待写法:为什么 Wait 返回后必须用 for 重新检查共享条件,如何配合 Locker 实现有界条件队列,以及 Cond、channel、Mutex 的选型边界。328 收藏 -
介绍 Go encoding/json 在动态解码时使用 Decoder.UseNumber 保留大整数文本,并安全转换为 int64、uint64 或 big.Int。328 收藏 -
介绍 Go 1.24+ 使用 http.Server.Protocols 开启明文 HTTP/2 的方法,涵盖同端口兼容、客户端核对、安全边界与审计清单。328 收藏