Go教程技术文章
-
Go 的 url.Values.Encode 会按 key 排序,重复 key 的值保持切片顺序;如果接口或签名要求自定义顺序,就要用有序 key 列表显式拼接。本文给出默认规则、编码边界和可复用写法。139 收藏 -
用 Go io/fs 的 fs.Sub 把目录映射成独立的 FS 视图,配合 WalkDir 和 ReadFile 处理相对路径,并厘清非法路径、缺失目录与符号链接安全边界。139 收藏 -
reflect.Value.IsZero 判断的是类型零值,time.Time.IsZero 判断的是零时间点。本文拆开值、指针和接口字段的反射入口,给出避免时间字段误判的写法与检查清单。138 收藏 -
Go 上传接口要限制请求体,应该在 Handler 入口用 http.MaxBytesReader 包住 r.Body,再用 errors.As 识别 *http.MaxBytesError 并返回 413。本文还区分 Content-Length 预检查与 multipart 的 maxMemory。134 收藏 -
Go 的接口类型可以参与比较,但接口里装入 slice、map 或 func 等不可比较动态值时,直接比较可能触发 panic。本文用 reflect.Type.Comparable 判断动态类型的类型级条件,再处理 nil、动态类型不同和 NaN 等边界,最后比较反射、泛型约束与业务键设计的适用场景。134 收藏 -
用 Go httptest.NewServer 构造一个可控的本地 HTTP 服务,把真实上游替换成固定 Handler,再围绕请求路径、请求头、状态码和响应体组织稳定测试。132 收藏 -
通过 httptest.NewServer 与自定义 RoundTripper 组合,记录测试客户端请求,并稳定覆盖固定 500 响应和传输错误分支。132 收藏 -
用 Go filepath.WalkDir 遍历目录时,SkipDir 只跳过当前目录,SkipAll 才能停止剩余遍历。本文通过查找文件示例说明错误处理、提前停止和未找到结果的区别。126 收藏 -
Go io.TeeReader 不会复制出两个独立 Reader,而是在下游读取时同步把已读字节写入 Writer。本文用缓存、文件和限流组合说明数据方向、错误传播及审计场景的边界。126 收藏 -
讲清 Go text/template 如何通过 FuncMap 注册自定义函数,为什么必须先 Funcs 再 Parse,以及如何处理函数签名、error 返回和生产环境初始化顺序。125 收藏 -
用 Go 的 atomic.Uint64 实现并发请求计数,掌握 Add、Load、零值、复制限制、溢出与旧版 sync/atomic 函数的使用边界。125 收藏 -
Go 的 bytes.Reader 适合从 []byte 创建只读游标。本文用一个可运行示例说明 Read、ReadAt、Seek、Len、Size 和 Reset 的区别,帮助你按顺序读取或按偏移取字节。125 收藏 -
Go 的 DisallowUnknownFields 适合封闭、可控的 JSON 写接口,用来尽早发现拼写错误;面对第三方 webhook 和可扩展 payload 时应谨慎开启。125 收藏 -
Go os.CopyFS 复制 embed.FS 时,目录按 0o777 创建并受 umask 影响,文件按 0o666 加源文件执行位创建;本文说明权限检查、已有文件和跨平台边界。124 收藏 -
Go 限制上传读取长度时,不要只相信 Content-Length,也不要直接 io.ReadAll。本文用 io.LimitReader 暴露 maxBytes+1 字节,再配合 io.Copy 流式写入临时目标,区分正常文件、超限文件和读取失败。123 收藏