Go教程技术文章
-
Go 的 database/sql Conn.Raw 只能在回调期间访问底层驱动连接。本文说明如何取得专用 Conn、判断驱动能力、处理 driver.ErrBadConn,并解释为什么不能把 driverConn 保存到回调之外。369 收藏 -
Go 1.25 继续完善 runtime.AddCleanup 的并发清理能力。本文从文件描述符这类外部资源出发,说明它与 SetFinalizer 的语义差异、必须保留的显式 Close,以及 GODEBUG 检查方式。368 收藏 -
bytes.Buffer.Bytes 返回的是仍由缓冲区管理的切片视图,不是独立副本。本文通过复用、写入和复制三个场景,说明如何判断别名风险,以及什么时候该用 bytes.Clone 或 append(nil, b.Bytes()...) 保留稳定数据。368 收藏 -
用 log/slog 的 Enabled 判断和 LogAttrs 组织一次可验证的小实验,说明低级别日志何时被丢弃、昂贵属性何时仍会提前计算,以及 HandlerOptions.Level 与 LevelVar 的边界。368 收藏 -
Go 的 unicode/utf8.RuneStart 只能判断字节是否可能位于一个 UTF-8 字符的起点,不能单独完成合法性校验。本文用切片扫描、DecodeRune 和 Valid 的组合处理截断与非法序列。368 收藏 -
Go 1.27 的 go fix 新增 unsafefuncs modernizer,可把特定的 unsafe.Pointer 与 uintptr 算术改写为 unsafe.Add。本文用最小代码说明改写对象、版本门槛和人工复核边界。368 收藏 -
go/token 把源文件位置压缩成 Pos,真正输出错误时还要经过 FileSet.PositionFor。本文用多文件和 //line 场景说明 adjusted、文件偏移与诊断文本如何对应,并给出可复现的核对方式。367 收藏 -
用 Go 的 httptest.ResponseRecorder 测试 Handler 输出,分别检查状态码、响应头和响应体,并解释 Result、Code 与 HeaderMap 的使用边界。367 收藏 -
通过实现 json.Marshaler,让 Go 枚举在 JSON 中输出可读文本,并对未知整数返回明确错误。367 收藏 -
Go 中 bufio.Writer.Write 成功并不代表底层资源已经写入,Flush 才会把缓冲内容交给文件、网络或自定义 io.Writer。本文说明 Flush 报错的原因、Write 与 Flush 的边界,以及文件、重试和 Sync 的处理清单。367 收藏 -
Go 的 bufio.Reader.Peek 只观察并不推进读取位置。本文用固定协议头示例说明如何先判断、再精确消费,处理 ErrBufferFull、短输入和预览切片生命周期,避免头部丢失或重复读取。367 收藏 -
用 Go log/slog 的 slog.Group 和 Logger.WithGroup 把请求、订单等字段放进稳定命名空间,并理解 TextHandler 与 JSONHandler 的输出差异。367 收藏 -
用 sync.Once、完成通道和 AfterFunc 的 stop 函数组合,解决取消回调与主动关闭并发时的重复清理、提前返回和竞态问题。367 收藏 -
本文说明 Go ed25519.Options 如何启用 Ed25519ph,重点讲清 SHA-512 摘要输入、Hash 与 Context 的配置,以及 PrivateKey.Sign 和 VerifyWithOptions 的互操作边界。367 收藏 -
用一个最小 Go 项目演示如何通过 //go:embed 把模板编译进 embed.FS,再用 ReadFile 读取、template.Parse 解析并执行,补充路径规则、错误处理、ParseFS 取舍与测试方法。367 收藏