Go语言技术文章
-
Go 的 map 参数仍然按值传递,但参数副本与调用者共享底层数据,所以修改键值会被调用者看到;重新绑定参数则不会替换调用者的 map。300 收藏 -
io.LimitReader 限制的是包装 Reader 在整个读取过程中的最大字节数,不是每次 Read 的缓冲区大小。本文用原创 Go 示例说明如何设置上限、正确处理 n 与 io.EOF,以及如何用 limit+1 判断源内容是否超限。299 收藏 -
用 Go signal.NotifyContext 把 SIGINT、SIGTERM 转成统一的 Context 取消,说明 worker、HTTP 服务和外部资源如何优雅收尾,以及 stop 的注销边界。299 收藏 -
Go 的 tls.Config.ServerName 为空时,默认安全校验无法确定要匹配的主机名,握手会在证书校验前失败。本文拆开 SNI、拨号地址、SAN 和 RootCAs,给出直连 IP 与自定义拨号的正确配置。299 收藏 -
Go 的 time.Time 用 == 比较失败,通常不是时间点不同,而是 Location 或单调时钟读数不同。本文解释 Equal、Round(0) 与 UTC 的使用边界。298 收藏 -
Go TLS 中 InsecureSkipVerify 只影响客户端验证服务端证书链和主机名,服务端客户端证书校验应看 ClientAuth 与 ClientCAs。298 收藏 -
Golang · Go问答 | 5天前 | 连接池 · HTTP客户端 · Go问答 · TIME_WAIT httptrace http.Transport Go transport Go端口增长 HTTP连接复用 CLOSE_WAIT
Go 出站端口增长要先区分 ESTABLISHED、TIME_WAIT 和 CLOSE_WAIT,再用 httptrace 判断 Transport 是否复用。本文从响应体收尾、长期复用 Transport、连接边界和 socket 检查四个方面给出排查方法。297 收藏 -
处理键值文本时,strings.Cut 适合围绕第一个分隔符取左右两段,strings.Split 适合获取全部片段。本文用 Go 示例说明两者的返回语义、空字段、缺少分隔符和空分隔符边界,并给出选择方法。297 收藏 -
time.AfterFunc 的 Timer.Reset 返回 false,只说明旧定时器已经到期或停止,不代表旧回调已经结束。本文用 started/finished 信号说明如何判断旧回调状态,并避免新旧回调并发访问共享数据。297 收藏 -
Go 的 net.Dialer 通过 LocalAddr 指定出站连接的本地 IP 和端口,通过 Timeout 限制拨号等待;本文说明 tcp 地址类型匹配、context 截止时间、连接读写 deadline 以及常见绑定失败的排查方法。295 收藏 -
Go 使用 database/sql 查询多行数据时,Rows 既是遍历结果的对象,也是连接释放边界的一部分。本文用一套可复用的收尾写法覆盖正常读取、Scan 失败、提前返回、上下文取消和连接池排查。294 收藏 -
Go http.CookieJar 中 Cookie 已收到却无法发送时,按接收主机、Domain、HostOnly、公共后缀、IP 和目标 URL 逐层排查域匹配,快速区分主机 Cookie 与域 Cookie。293 收藏 -
Go 的 Cmd.StdoutPipe 不应与 Run 混用,也不能在 Wait 前抢先关闭读取边界。本文用一条完整生命周期解释 Start、读取、Wait 的正确顺序,并排查管道提前关闭与双管道阻塞问题。293 收藏 -
解释 Go 中 panic(nil) 看起来无法被 recover 读取的原因,区分 Go 版本、defer 调用位置和 typed nil 接口,并给出可复用的恢复与记录写法。293 收藏 -
Go strconv.AppendInt 可以把 int64 按指定进制直接追加到 []byte 日志缓冲区。本文说明返回值、base 参数、负数边界、容量复用和基准测试的正确用法,避免把追加结果丢失或把示意数据当成实测结论。293 收藏