Go语言技术文章
-
bufio.Reader.Peek 适合查看缓冲区内的短前缀,不适合把整条未知长度消息一次性探出来。本文用 ErrBufferFull 解释边界,并给出切换 ReadBytes、ReadString 或按分隔符流式消费的判断方法。134 收藏 -
Go regexp.FindAllStringSubmatchIndex 返回的是按捕获组编号排列的字节下标对。本文用一个键值文本解析场景说明如何映射整体匹配、命名捕获组、未匹配分支和 UTF-8 边界。134 收藏 -
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 net TCP 监听地址,说明通配地址、具体网卡 IP、tcp4/tcp6 与双栈边界,并给出启动异常的排查清单。134 收藏 -
TestMain 适合管理每个包只启动一次的昂贵资源,但不应承载单个用例的可变数据。本文用共享 httptest 服务演示包级生命周期、不可变入口、用例命名空间、t.Cleanup 与退出码处理,让并行测试共享资源而不互相污染。134 收藏 -
Go 的 json.Decoder 可以从 io.Reader 连续读取多个顶层 JSON 值。本文区分单对象、空白分隔对象流和 JSON 数组,给出 EOF 边界、错误处理与可复用读取函数的设计方式。134 收藏 -
Gin 的 ShouldBind 会消耗请求体,第二次绑定常常只能拿到空内容。本文用 ShouldBindBodyWith 缓存同一份 body,演示两个结构体的绑定写法、错误处理和性能边界。134 收藏 -
Go 项目出现 vendor inconsistent 时,通常是 go.mod、vendor/modules.txt 或 go.work 与 vendor 目录不同步。本文按单模块和 workspace 两种情况给出恢复命令,并解释 replace、显式依赖和 -mod 选择。134 收藏 -
sync.Once 只保证初始化逻辑最多执行一次,失败也不会自动重试。通过区分一次性成功初始化、可重试初始化和启动失败退出,避免把错误状态永久缓存进服务进程。133 收藏 -
Go 的 iter.Pull 把 push-style 迭代器变成 next/stop 拉取接口,但提前结束时必须调用 stop 让 yield 协程收尾。本文用资源清理、重复 stop 和测试替身说明它的生命周期与并发边界。133 收藏 -
sync.WaitGroup.Go 负责启动任务并等待全部任务结束,但它不会替调用方收集 error。本文用带缓冲结果通道把失败传回主流程,拆开并发收口、首错处理、panic 边界和主 goroutine 的退出时机。133 收藏 -
netip.ParseAddr 返回的 netip.Addr 是值类型,可以用 Compare 做排序和相等判断,但 IPv6 Zone、非法输入和零值仍要单独处理。本文用可运行示例拆开这些边界。133 收藏 -
Golang · Go问答 | 1个月前 | go · 重定向 · Microsoft Visual Studio cnwizards(c++程序开发包) Go HTTP重定向 post http.Client
Go http.Client 遇到 301、302、303 时会把后续 POST 改为 GET;本文解释状态码差异、GetBody 和 CheckRedirect 的用法,帮助你避免请求体悄悄丢失。133 收藏 -
Go HTTP 接口接收 JSON 时,应在 json.Decoder 读取前用 http.MaxBytesReader 限制请求体大小,并区分 MaxBytesError、JSON 语法错误、未知字段和尾部多余数据。本文比较不同限制方式,给出可直接改造的 Handler 示例与上线决策表。133 收藏