Go教程技术文章
-
Go 处理不带时区的日期字符串时,应使用 Asia/Shanghai 配合 time.ParseInLocation,再按需求调用 Unix 或 UnixMilli,避免直接 time.Parse 按 UTC 解释造成 8 小时偏差。261 收藏 -
用 Go 标准库 http.ServeContent 实现支持 Range 的文件下载接口,理解 200、206、416、If-Range 与 io.ReadSeeker 的边界。260 收藏 -
用 sql.NullString 扫描 nullable 文本,清楚区分数据库 NULL、空字符串和普通字符串,并说明批量读取、写回和接口映射中的常见坑。260 收藏 -
讲清 Go httptest.NewRequest 如何构造请求体、设置 ContentLength,并用 Handler 回归测试覆盖已知长度、未知长度和空请求体边界。260 收藏 -
泛型代码里通过 reflect.TypeOf((*T)(nil)).Elem() 获取类型既绕又容易误读。本文用 Go 1.22 的 reflect.TypeFor[T]() 重写一个注册表实验,比较 nil、指针和接口类型的结果,并给出版本兼容与测试边界。259 收藏 -
Go 标准库 flag 默认把一个参数当成一个值。本文用自定义 flag.Value 收集重复参数,说明切片初始化、空值校验、错误提示和最终读取的边界。259 收藏 -
Go encoding/csv 读取 CSV 时,应先消费并验证表头,再用 FieldsPerRecord 固定数据行列数。本文给出跳过表头、识别 ErrFieldCount 与 ParseError、在入库前完成结构校验的实现方法。259 收藏 -
用 Go strconv.ParseInt 按进制和位宽检查字符串整数,区分 ErrSyntax 与 ErrRange,再安全转换为 int32、int64 等业务类型。259 收藏 -
本文说明 Go encoding/base32 的 CorruptInputError 如何表示首个非法输入字节偏移,并用 errors.As、UTF-8 位置换算、上下文切片和 padding 配置完成可读诊断。259 收藏 -
通过 go mod vendor 生成 vendor 与 vendor/modules.txt,在断网构建机用 GOPROXY=off 和 -mod=vendor 完成 Go 项目的离线构建,并处理 go.mod 与 vendor 不一致问题。258 收藏 -
database/sql.QueryContext 返回的 Rows 可能仍占用驱动连接。本文用可复用的 Go 代码说明为什么要 Close、何时检查 Rows.Err,以及查询提前退出时如何避免连接池被拖住。258 收藏 -
Go bufio.Reader 的 ReadString 和 ReadBytes 都能按分隔符读取一行,但返回类型、数据转换和末尾 io.EOF 的处理不同。本文用示例说明两者怎么选。258 收藏 -
用 Go modules replace 在不改 import 路径的前提下临时指向本地模块,说明 require、go.mod、go list -m -json 与提交前清理之间的排查关系。258 收藏 -
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏 -
用 Go 的 atomic.Bool 实现并发开关,掌握 Load、Store、Swap、CompareAndSwap 的选择,以及原子状态与配置可见性的边界。257 收藏