Go语言技术文章
-
Golang · Go问答 | 1个月前 | 反射 · Go问答 · Go reflect.ValueOf typed nil Value.IsValid Value.IsNil nil interface
reflect.ValueOf(nil).IsValid() 返回 false,不是反射失效,而是 nil interface 没有动态类型,ValueOf 返回了 zero Value。本文对比 nil interface 与 typed nil,并给出安全的 IsValid、Kind、IsNil 判断顺序。285 收藏 -
Go 的 CheckRedirect 返回自定义错误时,Response 可能仍非空但 Body 已关闭;如果要读取最后一次响应,应返回 http.ErrUseLastResponse,并在调用方负责读取和关闭 Body。285 收藏 -
用最小 Go HTTP 接口排查 URL 查询值乱码,定位手工拼接、加号语义、重复编解码与非 UTF-8 上游问题。285 收藏 -
Go 1.22 起可用 AppendEncode 把 Base64 结果追加到现有切片。本文讲清容量预估、dst[:0] 复用、返回值接收与底层数组所有权边界。285 收藏 -
用 Go Modules 的 replace 将主模块临时指向本地依赖,联调期间确认实际解析路径,提交前用 go mod edit -dropreplace 移除替换并检查模块文件差异。285 收藏 -
Go Colly 的 LimitRule 可以按域名控制同一站点的最大并发、固定间隔和随机间隔。本文结合 Async、Wait、DomainGlob 与多站点规则,说明怎样配置公开页面采集的节奏,并避开 Delay 与 Parallelism 同时设置时的语义误判。285 收藏 -
Go 用 os.Rename 替换同目录普通文件时,应先把数据写入临时文件,再关闭并将临时路径改名为目标路径。本文说明实现方式、失败清理和跨平台边界。285 收藏 -
Go HTTP 连接池出现空闲连接通常是 keep-alive 复用的正常结果。本文从 Response.Body、Transport 复用和三个空闲连接参数入手,给出排查与收紧连接池边界的方法。285 收藏 -
Go math/bits.RotateLeft64 用固定 64 位宽执行循环左移,负移位量表示向右旋转,超过 64 的移位量按整圈归一化。本文对比普通左移丢弃高位的差异,并给出固定边界用例。285 收藏 -
用 context.WithCancelCause 把请求取消的真实原因带过边界,并通过 errors.Is、context.Cause 和并发测试确认错误链没有丢失。284 收藏 -
Go 1.25 的 go vet 新增 hostport 分析器,可以发现用 fmt.Sprintf 拼接 host 和 port 后传给 net.Dial 的 IPv6 地址错误。本文从错误现场出发,改用 net.JoinHostPort,并用 vet 与运行测试核对修复结果。284 收藏 -
用 Go io/fs.Sub 把一个目录裁成受限文件树,配合 fs.ValidPath 和 fs.Open 处理路径边界、目录遍历与失败回退。284 收藏 -
FindAllStringSubmatchIndex 返回 UTF-8 字节下标。本文用 Go 将完整匹配和子表达式转换为 rune 区间,并处理可选分组的 -1 与字素簇边界。284 收藏 -
围绕 Go testing.B.RunParallel 说明 b.N、GOMAXPROCS、SetParallelism 与墙上时间的关系,给出在并行基准结束后用 b.N 除以 b.Elapsed 估算 ops/s 的写法,并梳理 CPU、锁和外部依赖造成的吞吐边界。284 收藏 -
Go 的 multipart.Writer 设置自定义 boundary 时,必须在创建第一个 Part 前完成。本文解释调用顺序、请求头一致性、参数限制与排查清单。284 收藏