Go语言技术文章
-
Go html/template 会根据变量所在的 HTML、属性和 URL 上下文自动处理输出。本文对比普通文本、查询参数和完整链接的写法,说明不安全协议为何会被过滤,以及 template.URL 的可信来源边界。326 收藏 -
Go 1.27 为 crypto/x509.Certificate 增加 RawSignatureAlgorithm,可读取证书签名算法的 DER AlgorithmIdentifier。本文说明如何从 PEM 证书解析 OID,区分原始字节与 SignatureAlgorithm,并处理未知算法、ASN.1 错误和证书验证边界。326 收藏 -
说明 Go 1.27 中 tls.MLKEM1024 的配置方式、CurvePreferences 的集合语义,以及回退候选和握手状态读取方法,区分支持配置与实际协商结果。326 收藏 -
Go encoding/csv 遇到 CSV 字段数量不一致时,不必直接丢弃整条记录。本文用 FieldsPerRecord、ParseError 和 InputOffset 拆分正常行与坏行,保留可复查的错误位置。326 收藏 -
Go 标准库 debug/macho.File.Section 可以按名称取得 Mach-O 节区。本文从打开文件、查找节区、读取元数据到选择 Data 或 Open 的完整流程,说明错误处理、资源关闭和输入边界。326 收藏 -
Go slog.SetDefault 可以让 slog 顶层函数和标准 log 默认 Logger 共用同一个结构化 Handler。本文说明 JSONHandler 接入、SetLogLoggerLevel 的级别控制,以及独立 log.Logger 与 NewLogLogger 的边界。326 收藏 -
Go transform.Append 可将转换内容追加到已有字节缓冲区。本文说明 result、n、err 的含义,给出保留前缀的实现,并解释容量复用、状态重置和部分输出边界。326 收藏 -
Go 测试里 t.Setenv 会通过 Cleanup 恢复进程环境,但环境变量属于整个进程,不能与 t.Parallel 或并行父测试混用。本文用一个小型配置测试项目拆开这个限制,给出串行隔离、参数注入和子测试分组的选择边界。325 收藏 -
Go 的 os.ReadDir 返回 DirEntry,不必立刻为每个目录项读取完整 FileInfo。本文拆开 Type、IsDir、Info 的成本和错误边界,说明排序语义、符号链接判断以及适合目录扫描的最小写法。325 收藏 -
sync.OnceFunc 会缓存初始化函数的 panic 结果,失败后再次调用不会自动重试。本文用最小示例拆开成功、失败和显式重试三种边界。325 收藏 -
time.Time.Round 按绝对时间而不是显示出来的本地小时取整,所以跨日期、带时区和带单调时钟的值容易出现误判。本文用可复现的 Go 示例拆开 Round、Truncate、Location、== 与序列化的边界。325 收藏 -
读取用户提供的文件名时,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 收藏