Go问答技术文章
-
Go slices.BinarySearch 返回的索引即使找不到元素也有意义:先保证切片有序,再用 found 判断命中,并把索引作为插入位置或下界使用。194 收藏 -
Golang · Go问答 | 2天前 | 并发 · 错误处理 · Context · Go问答 · 服务排查 · Go 错误日志 超时 context.WithCancelCause context.Cause 取消原因
只记录 context.Err() 时,Go 服务通常只能看到 context canceled 或 deadline exceeded,无法判断是上游主动取消、下游超时还是业务熔断。本文用 context.WithCancelCause 和 context.Cause 传递可诊断的取消原因,并说明父子 Context、超时边界与日志落点。191 收藏 -
Go 的 slices.Collect 能把 iter.Seq 惰性序列一次收成切片。本文用分页数据和空输入例子说明 iter.Seq、slices.Collect、append 之间的关系,以及无法预估长度时的容量取舍。187 收藏 -
Go 客户端明明复用了同一个 http.Transport,却不断新建 TCP 连接,常见原因不是连接池失效,而是响应体没有读完并关闭、每个请求重复创建 Transport,或空闲连接参数与并发量不匹配。本文用可观察的请求流程拆开判断方法。184 收藏 -
reflect.TypeFor[T]() 从 Go 1.22 开始直接返回泛型类型 T 对应的 reflect.Type。本文对比旧的 reflect.TypeOf((*T)(nil)).Elem(),说明接口类型、指针类型、类型缓存和 Go 版本兼容边界,给出可运行的类型判断示例。184 收藏 -
解释 Go 测试中 testing.TB.Cleanup 的执行时机,结合主测试、t.Run 子测试和并行测试,定位清理函数看似没有执行的常见原因。181 收藏 -
Go 的 net/http Cookie 同时设置 Expires 与 MaxAge 时,浏览器如何判断会话、持久化和删除?本文用 SetCookie 与 Request.Cookie 的最小例子拆开三个边界。181 收藏 -
io.Copy 返回的 written 和 err 如何判断传输是否完整?本文从写入中断现场出发,拆解 EOF、写入错误、短写入与大小核对的边界。180 收藏 -
Golang · Go问答 | 21小时前 | 字符串 · 标准库 · go · 接口设计 · 边界处理 · Go strings.CutPrefix Go strings.CutSuffix 协议头 字符串裁剪 零值返回
strings.CutPrefix 和 CutSuffix 都返回裁剪后的字符串与 found 布尔值,但空前缀、未匹配和完整匹配的结果不同。本文用协议头解析场景说明如何组合两个函数,避免把未匹配误判为空字符串。180 收藏 -
Go 里读到 io.EOF 不等于所有 Reader 都永久失效。本文用 bytes.Buffer、文件和分块读取场景拆开 EOF 的含义,说明缓冲区复用时该看什么状态,以及如何避免把 EOF 当成普通错误。179 收藏 -
Go 1.21 给 bytes.Buffer 增加 Available 和 AvailableBuffer 后,如何判断可写余量、避免误解短写,并用 Cap 和 Len 验证扩容结果。178 收藏 -
Golang · Go问答 | 16小时前 | go · Context · net/http · Go context取消 http.NewRequestWithContext Request.WithContext
http.NewRequestWithContext 与 Request.WithContext 都能把 context 交给 Go HTTP 请求,但创建时绑定、浅拷贝语义和请求体复用边界并不一样。本文用可运行示例拆开取消责任、Clone 深拷贝和常见误区。177 收藏 -
Golang · Go问答 | 2天前 | 并发 · net/http · HTTP客户端 · Go问答 · 请求重试 · Go header 请求体 http.Request.Clone WithContext HTTP重试
http.Request.Clone 和 WithContext 都能生成带新上下文的请求,但它们对 Header、URL、Body 和并发使用的约束不同。本文用一次 HTTP 重试场景拆开两者的复制边界,给出安全写法和验收检查。173 收藏 -
netip.ParseAddr 失败时返回的是无效 Addr 和可诊断的错误,不能只靠 Addr{} 判断输入问题。本文用最小 Go 示例拆开 IPv4、IPv6、空字符串和带区域标识的边界,并给出服务端校验时可复用的判断顺序。170 收藏 -
bufio.Reader.Peek 返回的是内部缓冲区视图,下一次读操作后就可能失效。本文用一个协议头判断场景说明 Peek、Read、copy 和 ErrBufferFull 的边界。169 收藏