Go教程技术文章
-
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 收藏 -
内网模块代理不是简单把 GOPROXY 改成一个地址。本文拆开逗号与竖线的回源规则,并说明 GOPRIVATE、GONOPROXY、GONOSUMDB 如何组合,避免私有模块泄露或代理故障被误判为没有回源。327 收藏 -
讲清 Go x509.SystemCertPool 在 Linux 容器、macOS 和 Windows 中的兼容处理:系统池优先,异常时回退,追加自定义 CA,并区分根证书、PEM 和主机名错误。327 收藏 -
Golang · Go教程 | 1星期前 | 性能优化 · Go教程 · go bytes.Buffer bytes.Buffer Reset Go 缓冲区复用 Go Buffer 容量复用 Go Bytes 切片别名
Go 复用 bytes.Buffer 时,Reset 会把可读长度归零并保留底层存储。本文用连续写入、容量观察和 Bytes 切片复制说明正确用法与生命周期边界。327 收藏 -
Go 的 csv.Reader.LazyQuotes 只放宽双引号语法,不会取消字段数、分隔符和记录边界检查。本文按输入形态说明哪些脏 CSV 仍会失败,并给出可定位错误的读取写法。327 收藏 -
Go encoding/csv 的 FieldsPerRecord 决定每行字段数如何校验:正数固定列数、0 以首行定标、负数允许变化。本文用订单导入场景演示三种模式、错误定位与按行兼容策略。326 收藏 -
Go fuzz 发现失败输入后,不要只记日志。将它保存在 testdata/fuzz/FuzzXxx 目录,修复后用普通 go test 回归;本文说明 f.Add、失败语料文件、复现命令和目录不可写时的处理。326 收藏 -
Go vendor 不是简单复制依赖目录。本文说明如何用 go mod vendor 生成离线依赖,理解 vendor/modules.txt 的版本清单,并用 GOPROXY=off 检查构建是否真正摆脱网络和模块缓存。326 收藏 -
ReuseRecord 只影响 Reader.Read 返回的记录切片是否可复用,对 ReadAll 没有把全部记录变成单行复用的效果。本文比较两种读取方式的内存边界,并给出流式处理、保留记录和错误检查的选择方法。326 收藏 -
读取用户提供的文件名时,filepath.Join 只能清理字符串,不能阻止符号链接把路径带出目录。Go 1.24 的 os.OpenRoot 与 Root.Open 让相对路径在指定根目录内解析,本文用下载文件场景说明控制流、测试边界和仍需保留的权限检查。325 收藏 -
用 Go 编写长时间运行的命令行任务时,signal.NotifyContext 可以把 Ctrl+C 或 SIGTERM 转成 Context 取消信号;本文演示如何停止新任务、保存最后一个完整检查点,并在下次启动时继续。325 收藏 -
Go 中 errors.Is 判断的是错误树里的目标语义,不是“看起来同类”的类型或文本。本文用 errors.Join 和自定义错误说明如何避免误判。325 收藏 -
通过业务层、bufio.Writer 缓冲层和底层 io.Writer 的分层记录,区分 Go 写入阶段错误与最终 Flush 错误,并给出第一次错误的收口方式。325 收藏