Go教程技术文章
-
go-mp3 的时长应按解码后的字节数、每个采样的4字节格式和首帧采样率计算。本文给出可寻址文件与非可寻址流两种处理方式,并说明 Length 返回 -1 时的累计策略。240 收藏 -
用 go/types 生成 Go 类型文档时,可变参数在 Params 中表现为最后一个切片,是否显示省略号由 Signature.Variadic 决定。本文说明如何使用 WriteSignature,以及如何安全地实现自定义参数渲染。240 收藏 -
Go 1.24 的 testing.T.Chdir 会把原工作目录交给 Cleanup 恢复,测试断言失败也不会把后续测试留在临时目录。本文用 t.TempDir 说明失败路径、PWD 更新、并行限制,以及旧版本的兼容写法。240 收藏 -
Go 1.27 的 vet printf 分析器会提示一种容易被忽略的错误包装:错误类型本身实现了 error,却把指针作为 %w 操作数。本文解释它为何影响 errors.As,以及怎样修复并纳入持续检查。239 收藏 -
用 testing/synctest 的虚拟时钟测试带定时器的 HTTP handler,掌握 handler、goroutine、Wait 和真实网络之间的边界。239 收藏 -
Go HTTP 服务端按 Accept-Encoding 协商 gzip 响应,正确处理 Content-Encoding、Vary、响应头时机和 gzip.Writer 关闭顺序。238 收藏 -
Go 通过握手后的 ConnectionState.LocalCertificate 读取本地证书链。本文区分本地与对端证书,提供 DER 解析与指纹记录示例,说明恢复会话空链、多证书配置和证书轮换的观测边界。238 收藏 -
Go os.Root.OpenFile 可以把文件名解析限制在已打开的根目录下。本文说明如何创建工作区 Root、按相对路径读写文件、选择 flag 与 perm,并处理越界路径、非法权限位和资源关闭问题。238 收藏 -
围绕 encoding/binary.ByteOrder.Uint64 讲清固定 8 字节 uint64 的读取方式、BigEndian 与 LittleEndian 选择、NativeEndian 边界,以及连续记录和短输入的安全处理。238 收藏 -
Go database/sql.DB.Stats 返回的是连接池累计与瞬时状态。本文说明如何读取 InUse、Idle、WaitCount 和 WaitDuration,用连续采样计算等待窗口,并区分连接池触顶与数据库服务器慢查询。238 收藏 -
Go crypto/ecdh.PublicKey.Bytes 会返回公钥编码的副本,适合放入协议字段或持久化格式;接收端应使用同一曲线的 NewPublicKey 重新解析,并用 Equal 与 Curve 区分对象相等和曲线匹配。本文给出最小写法、错误处理和常见边界。237 收藏 -
本文用一个升序整数切片说明 Go sort.Find 的比较函数写法、found 结果判断、重复值定位和插入位置边界,重点解释为什么 cmp 必须保持正数、零、负数三段结构。237 收藏 -
Go url.URL.Redacted 会像 URL.String 一样重组地址,但只把 u.User 中的密码替换为 xxxxx。本文用解析、日志和错误处理场景说明如何安全输出带凭据的 URL,并厘清查询参数、片段和真正请求发送之间的边界。237 收藏 -
用 Go 1.24 的 os.OpenRoot 固定文件访问根目录,再结合 bufio.Reader.Peek 查看文件头而不推进读取位置;文章同时说明短文件、缓冲区大小、越界路径和符号链接边界的处理方式。237 收藏 -
用 os.DirFS 和 io/fs.WalkDir 遍历一个目录,保留 Go 文件系统约定的相对路径;本文从根目录、回调错误、普通文件筛选和 filepath 转换几个体验点说明如何写成可复用的小函数。237 收藏