Go问答技术文章
-
用 Go netip.ParseAddr 解析带接口作用域的 IPv6 地址,读取 Addr.Zone,并掌握 WithZone、As16 与 Prefix.Contains 的边界。363 收藏 -
Go 处理大文件时,Scanner 和 Reader 都能流式读取,但选择依据不是文件总大小,而是单条记录长度、分隔符语义和错误控制需求。本文给出 Scanner.Buffer、Reader.ReadString 及 EOF 处理的落地判断。363 收藏 -
Squirrel 的 SelectBuilder 采用不可变 builder 语义,Where、OrderBy 等方法返回新值。本文说明为什么必须接收链式返回值,并给出基础查询、状态条件和排序分页的复用写法。363 收藏 -
解释 Go runtime.SetFinalizer 为什么不是可靠的资源释放器,结合对象可达性、GC 时机、终结器链和 Close 设计给出可验证的使用边界。362 收藏 -
Go 的 http.Client 遇到 3xx 响应时会自动跟随重定向,但 CheckRedirect 的返回值、请求头继承和错误处理很容易让调用方误以为请求丢了。本文从一个重定向异常场景出发,分层检查 req.URL、Header 和 ErrUseLastResponse,并给出可验收的修复写法。362 收藏 -
Go 1.27 允许结构体字面量直接使用嵌入结构体提升字段作为键。本文用 Gopher 和 Habitat 示例说明字段选择器规则、与旧写法的兼容边界,以及如何用 go.mod 和 go test 做编译检查。362 收藏 -
Go 1.27 的 HTTP/2 服务端开始参考客户端优先级信号,可能让并发请求的服务顺序发生变化。本文说明 DisableClientPriority 的作用范围、配置方式,以及为什么它不能替代业务层严格排序。362 收藏 -
fmt.Fscan 面向空白分隔的字段扫描,会跳过前导空白并把换行当作空格。本文说明它为什么不适合保留整行空格,并给出按字段或按行读取的选择方法。362 收藏 -
Go channel 关闭后接收仍会得到元素类型的零值,不能只看 v 判断结束。本文用 comma-ok 区分有效零值、关闭空 channel 和 nil channel,并说明缓冲 channel 的正确消费方式。361 收藏 -
Go 的 encoding/xml 没有 xmlattr 关键字,XML 属性应使用 xml:"name,attr" 映射到导出字段。本文说明属性读取、嵌套元素、写回 XML、未知属性接收和常见空值排查方法。361 收藏 -
Go regexp 中点号默认不匹配换行。本文用最小示例说明 (?s)、(?s:...)、显式字符类和非贪婪量词的选择,帮助控制跨行范围并避免多条记录被一次吞并。361 收藏 -
WithoutCancel 会保留父上下文中的值,但主动切断父级取消、截止时间和错误传播,所以 Deadline 返回 ok=false。本文说明这一设计,并给出为后台任务重新设置独立超时的安全写法。361 收藏 -
cgo 的固定边界成本、指针与转换规则会在细碎调用中被放大。本文用调用计数、基准和 profile 分层定位,并示范把逐元素调用改成安全的批量接口。361 收藏 -
Go time.Ticker 在接收方处理较慢时会调整节奏或丢弃 tick。本文区分可跳过的状态刷新、必须补偿的周期任务和不能依赖 ticker 的可靠事件,给出带中文注释的 Go 实现与选择表。361 收藏 -
Go JetStream 的 Ack 发送确认但不等待服务端回复,DoubleAck 会等待回复。通过处理函数与两张结构图,说明确认返回值、超时状态、业务幂等及方法选择。361 收藏