Go语言技术文章
-
Go test 输出 cached 并不代表环境变量读取失败,而是成功测试结果可能被复用。本文解释缓存输入、环境变量边界、GODEBUG 线索和 -count=1 的正确用法。468 收藏 -
用 Go 的 multipart.Reader 逐个接收多个上传文件,配合 MaxBytesReader 和 LimitReader 控制请求总量、单文件大小,并正确处理 EOF、超限和临时文件清理。441 收藏 -
go vet 的 printf 检查会对照格式动词与实参数量、类型。本文用 Go 示例解释 %d、%s 等格式为什么触发诊断,以及如何修正而不是用 %v 掩盖问题。181 收藏 -
Golang · Go教程 | 1星期前 | HTTP · go · sse · 流式响应 · Go EventSource SSE Server-Sent Events http.Flusher ResponseController
Go 写 SSE 接口时,事件格式、Flush 和连接关闭必须同时成立:消息用空行分隔,写入后显式刷新,并监听请求 Context 的取消信号。本文比较 http.Flusher 与 ResponseController.Flush,给出一段能处理写入错误和客户端断开的最小实现。491 收藏 -
unsafe.Pointer 转换只改变地址视图,不会自动延长 Go 对象生命周期。本文从外部同步调用和对象可达性断点说明 runtime.KeepAlive 的正确位置,并区分 C 代码跨调用保存 Go 指针时的 Pinner、C 内存和 cgo.Handle 方案。264 收藏 -
用 Go 的 httptest.ResponseRecorder 测试 Handler 输出,分别检查状态码、响应头和响应体,并解释 Result、Code 与 HeaderMap 的使用边界。367 收藏 -
Golang · Go问答 | 1星期前 | 反射 · Go问答 · Go reflect.ValueOf typed nil Value.IsValid Value.IsNil nil interface
reflect.ValueOf(nil).IsValid() 返回 false,不是反射失效,而是 nil interface 没有动态类型,ValueOf 返回了 zero Value。本文对比 nil interface 与 typed nil,并给出安全的 IsValid、Kind、IsNil 判断顺序。285 收藏 -
用 httptest.NewServer 搭建三段重定向链,演示默认客户端跟随、CheckRedirect 记录每一跳,以及 ErrUseLastResponse 停止跟随时的断言和 Body 清理。240 收藏 -
Go 反射里 CanSet 为 false,通常不是 Set 本身的问题,而是 Value 不可寻址、来自未导出字段或少做了一次 Elem。本文用最小示例和诊断清单定位三类来源。405 收藏 -
Go 的 HTTP 客户端连接池关键不在于每次请求都新建 Client,而在于长期复用同一个 Transport,并分别理解空闲连接、主机总连接和空闲回收时间。本文给出可直接改造的配置与边界。482 收藏 -
Go 泛型约束里的 int 只匹配具体类型,~int 匹配底层类型为 int 的命名类型。本文用 type Score int、类型别名和泛型函数说明两者的选择边界。447 收藏 -
用 Go 1.22+ 的 net/http ServeMux 集中注册 /api/v1 公共前缀路由,讲清方法模式、动态段、子树斜杠和冲突边界。292 收藏 -
Go 泛型函数调用时,类型推导主要依据实参与形参的匹配关系和类型约束,不能仅凭接收返回值的变量类型反向猜出类型参数。本文用最小代码说明失败原因、可推导边界与显式类型实参的写法。303 收藏 -
Go HTTP 接口接收 JSON 时,应在 json.Decoder 读取前用 http.MaxBytesReader 限制请求体大小,并区分 MaxBytesError、JSON 语法错误、未知字段和尾部多余数据。本文比较不同限制方式,给出可直接改造的 Handler 示例与上线决策表。133 收藏 -
Go 中值类型不能赋给接口,常见原因是接口要求的方法由指针接收者声明,因而只进入 *T 的方法集。本文用最小示例区分方法调用的自动取地址与接口赋值规则,并给出值接收者、指针接收者和编译期断言的判断方法。478 收藏