Go问答技术文章
-
裸 IPv6 不等于主机加端口。说明 SplitHostPort 的方括号要求,用分字段校验示例正确组装端点,并区分 IP、域名、数字端口和 URL 的输入边界。238 收藏 -
context.Cause 返回的 error 不能只靠字符串判断。本文从取消信号的生命周期出发,说明如何用 ctx.Err() 判断标准状态,用 errors.Is 和 errors.As 判断自定义原因,并区分主动取消、超时和父级传播。238 收藏 -
Golang · Go问答 | 3星期前 | 闭包 · go · 垃圾回收 · Go问答 · Go 生命周期 垃圾回收 keepalive Stop runtime.AddCleanup 清理函数 对象捕获
Go runtime.AddCleanup 的 cleanup 和 arg 不能反向持有 ptr,否则目标对象不会变成可回收状态;本文用参数化清理、KeepAlive、Stop 和并发边界说明如何安全设计清理函数。237 收藏 -
Go 子进程的 Cmd.Env 为 nil 时默认继承父环境,显式切片会替换环境。本文比较继承与覆盖,说明 Dir、环境快照和输出管道的取舍,并提供自启动探针。237 收藏 -
Go 的 http.Transport 默认会缓存连接,但连接池并不是无条件复用。每次重新创建 Transport、Response.Body 没有读完并关闭、主动关闭 keep-alive、空闲连接超时、每主机连接上限以及服务端协议设置,都可能让请求重新建连。本文用 httptrace 定位原因,并给出稳定的 Transport 管理方式。237 收藏 -
sql.NullString 用于接收数据库 NULL,但它没有把自身自动编码为 JSON null。本文从 String、Valid 两个字段解释输出为何是对象,并给出接口层输出 null 的两种稳妥写法。237 收藏 -
Go 使用 nats.go 异步订阅时,回调处理速度落后会让订阅 pending 队列上涨并触发慢消费者。本文解释消息数与字节数限额、Pending/Dropped 证据、SetPendingLimits 的边界,以及客户端队列与服务端连接缓冲的区别。237 收藏 -
Go runtime trace 里出现 goroutine 阻塞并不一定是锁竞争,也可能来自网络、系统调用或调度延迟。本文按事件与等待原因拆解分析路径,并说明何时切换到 pprof。236 收藏 -
Go reflect.Value.MethodByName 找不到方法时会返回零 Value,不能直接 Call。本文说明 IsValid 判断、导出方法与大小写、值接收者和指针接收者差异,以及反射调用前的签名检查。236 收藏 -
Go flag.FlagSet 的空结果通常不是没有解析,而是输入没有位置参数、flag 仍使用默认值,或解析在第一个非 flag 参数处停止。本文用最小示例拆开 Parse、NArg、Args、Arg 和 Parsed 的边界。236 收藏 -
Go types.MethodSet 只返回方法,不负责列出结构体字段。本文区分 MethodSet、types.Struct 和选择器查找,并说明嵌入字段的方法提升与同名冲突边界。236 收藏 -
Go encoding/base64 返回 CorruptInputError 时,怎样把错误值还原为零基字节偏移,并区分非法字符、填充错误、尾部垃圾和 Strict 模式错误。235 收藏 -
Go x/text/language.Parse 解析的是 BCP 47 语言标签,不是任意文本清洗器。本文区分格式错误、未知值和部分解析结果,说明 Parse、Make、MustParse 与 ParseAcceptLanguage 的选择边界。235 收藏 -
Go csv.Reader.TrimLeadingSpace 只忽略字段开始处的空白,不会删除引号包裹内容内部的空格。本文用最小示例拆开引号外、引号内两种位置,并说明注释、分隔符和字段数量设置的边界。235 收藏 -
Go LDAP 的空密码不是普通登录失败的另一种写法。本文区分 Bind、UnauthenticatedBind 和 AllowEmptyPassword 的职责,给出认证意图封装与连接隔离示例,避免把未认证会话误当成用户身份。235 收藏