Go语言技术文章
-
Go image/jpeg 的 Options.Quality 取值范围是 1 到 100,默认值为 75。本文按缩略图、网页上传和归档等用途给出质量参数的选择起点,并说明 Encode 的传参、体积与细节的权衡,以及 PNG、透明图和反复编辑场景的边界。186 收藏 -
Go strings.Cut 处理可选字段时,关键是同时保留 before、after 和 found:字段不存在与字段存在但值为空不能混为一谈。本文用首个键值分隔符的解析例子说明返回值、空分隔符、可选字段结构,以及 Cut 与 SplitN、CutPrefix、CutSuffix 的边界。186 收藏 -
io.CopyBuffer只复用通用复制路径的暂存区。本文解释专用方法分派、额外分配来源,以及外部缓冲区的所有权、文件关闭与错误处理。186 收藏 -
Go 多生产者流水线中,关闭通道的关键是先划分发送责任,再用 WaitGroup 等待全部发送者退出,由协调者关闭共享输出,并用 context 处理下游提前结束。186 收藏 -
io.Pipe 消费端提前退出后,应先用读端 CloseWithError 通知写端,再等待生产协程。本文区分两端关闭职责与错误传播,给出有限数据示例,并说明 nil、重复关闭、部分写入和上游阻塞的处理范围。185 收藏 -
Go 文件操作失败时,不要比较错误字符串。本文用 errors.Is 配合 fs.ErrNotExist 和 fs.ErrPermission 区分文件不存在、权限拒绝及其它错误,并保留 PathError 上下文。185 收藏 -
Go io.Pipe 的读写端是同步边界;本文用 CloseWithError 把生产错误传给消费者,并区分 EOF、业务错误与提前关闭,避免 goroutine 泄漏。185 收藏 -
Go 1.23 起使用 net.Dialer.KeepAliveConfig 明确设置 TCP 保活开关、空闲时间、探测间隔和未应答次数,并说明旧字段与平台差异。185 收藏 -
Go map 的 range 顺序未指定,不能直接依赖遍历结果。本文用一个小型标准库示例收集 key、排序后回查 map,并说明按 value 排序时如何用 key 处理相同值,覆盖 nil map 与并发边界。185 收藏 -
errors.Join 传入一个非 nil 错误时仍会返回包装错误。本文用最小示例区分 ==、errors.Is 与 Unwrap() []error,并给出单错误和多错误场景的返回策略。185 收藏 -
maps.Clone 返回新的浅拷贝,不能把已有 map 当作写入目标。若要反复刷新同一容器,应按需求使用 maps.Copy,要求精确替换时先 clear 再 Copy,并注意 slice、指针等 value 仍是浅拷贝。185 收藏 -
使用 xml.Decoder.Token 读取带命名空间的 XML 时,Name.Space 保存的是命名空间 URI,而不是文档中的短前缀。本文从一个最小示例出发,说明如何按 URI 与 Local 组合匹配元素,并处理未知前缀与 RawToken 的边界。185 收藏 -
Go 文档注释中的 # 空格、缩进和空行会影响 Heading 与 Paragraph 的识别;Go 1.19 前的旧式单行标题还可能在 gofmt 后变成显式标题。本文说明识别规则、避免误判的写法,以及如何用 comment.Parser 检查实际块类型。185 收藏 -
Go 使用 encoding/base64.NewEncoder 流式编码时,尾部字符缺失通常是没有关闭编码器,导致不足 3 字节的最后一块仍留在缓冲区。本文说明正确的 Close 顺序、错误处理和验证方法。185 收藏 -
Go 交叉编译后程序无法启动,优先检查 GOOS、GOARCH、CGO_ENABLED 与动态依赖是否和目标机器一致。本文按启动症状给出一套可执行的参数排查顺序。184 收藏