Go语言技术文章
-
用 github.com/pkg/sftp 区分单文件请求上限、文件任务池和读写方向,并用 ReadFromWithConcurrency 精确控制一次传输的并发度。232 收藏 -
把配置中的超时统一写成 500ms、2s 这类带单位字符串,在 Go 程序入口解析为 time.Duration,再复用于 context、HTTP 客户端和定时任务,避免裸整数造成单位误读。232 收藏 -
用 Go netip.AddrFrom16 从 16 字节数组构造 IPv6 地址,说明字节布局、IPv4 映射 IPv6 的语义,以及 AddrFromSlice 的长度边界。232 收藏 -
用一个可复用的 Go 最小示例说明 errors.Join 如何同时保留多个底层错误,解释 nil 处理、错误树检索、errors.Is/As 的选择,以及不要误用 errors.Unwrap 的边界。232 收藏 -
Go 的 encoding/hex Dump 能把协议字节排成带偏移、十六进制列和 ASCII 侧栏的可读文本。本文说明 Dump、DumpString 与 Dumper 的选择,并用静态示意解释如何定位字段边界。232 收藏 -
Go 的 image.Decode 会根据已注册的解码器识别 PNG 或 JPEG。本文给出空白导入、格式返回、尺寸预检和文件位置复位的最小写法。231 收藏 -
Go 程序在 arm64 上变慢时,不能只看一组 benchmark 就认定是编译器问题。本文先固定代码、输入和环境,再用 amd64/arm64 对照、同机 Go 工具链对照、CPU profile 和指令集实验,把性能下降归因到业务代码、标准库、运行时或编译器生成代码。231 收藏 -
测试依赖用户主目录的 Go 代码时,先按平台选择 HOME 或 USERPROFILE,再用 t.TempDir 与 t.Setenv 注入临时路径,并覆盖空值错误分支。本文给出可复用的断言结构和 Cleanup 边界。231 收藏 -
Go 文件上传时不要只相信扩展名或客户端 Content-Type。本文说明 http.DetectContentType 最多读取前 512 字节的工作边界,给出保留完整文件流的实现,并演示如何在 multipart 文件 Part 上接入允许类型判断。231 收藏 -
Go 1.27 的 atomictypes modernizer 可将适用的旧式原子函数访问迁移为强类型原子对象。本文说明限定分析器的命令、计数器迁移示例,以及初始化、对象复制、接口兼容和回归检查的边界。231 收藏 -
Go 构建在启用 vendor 模式时会从主模块根目录的 vendor 目录取包,不会读取模块缓存中的同名新版本。本文拆开 go.mod、vendor/modules.txt 与 -mod=vendor 的职责,说明如何更新 vendor、如何暂时切回模块缓存,以及怎样判断版本来源。231 收藏 -
Testify 的 mock.AnythingOfType 比较的是运行时类型名。本文区分 Go 类型别名与定义类型,说明包限定名称、指针和 MatchedBy 的正确用法。231 收藏 -
Go net/url 解析 https://example.com/items? 时,RawQuery 为空并不代表原始 URL 没有问号。本文用 URL.ForceQuery 区分没有查询、空查询和带参数查询,给出解析、修改和输出请求 URI 的最小配方。231 收藏 -
Go time.After 只能返回接收通道。本文用单次所有者模式解释 NewTimer 与 context 取消、Stop 清理、同时就绪及 Go 1.23 语义差异。231 收藏 -
围绕 Go archive/tar 流式写入大归档文件,讲清 Header.Size、WriteHeader、Write、Close 的配合,以及结果为空或截断时的排查顺序。231 收藏