Go语言技术文章
-
Go channel 关闭并耗尽后,单值接收仍会返回元素类型的零值。本文用 int channel 说明合法零值与关闭状态的区别,并给出 value、ok 双值接收、range 和缓冲 channel 的边界处理方式。378 收藏 -
Go url.Parse 会把路径保存为解码后的 Path,原始的 %2F 等编码可能只保留在 RawPath 提示中。本文用 EscapedPath 说明如何稳定输出有效的原始路径编码,并处理提示失效的边界。465 收藏 -
Go json.Decoder 字段为空时,先看错误,再检查导出字段、JSON标签、大小写、嵌套层级、目标指针和输入流。区分缺失、null与空字符串,并说明严格模式的兼容取舍。166 收藏 -
Go json.Unmarshal 解码时间字段时报错,先区分时间格式不符合 RFC3339 还是 JSON 类型与结构体字段不匹配,再决定保留 time.Time、增加自定义 UnmarshalJSON,或使用中间结构完成外部格式适配。214 收藏 -
Go 里可以用带缓冲 channel 做轻量 semaphore,把令牌容量当作 goroutine 并发上限,再用 defer 归还令牌避免提前返回造成泄漏。本文从批量任务小项目出发,整理阻塞获取、可取消获取和 WaitGroup 收尾的写法。402 收藏 -
ExecContext 返回成功并不等于一定改动了数据。本文用 Result.RowsAffected 区分执行失败、零行结果和驱动计数差异,给出更新与删除场景中的判断方式。449 收藏 -
Go 接入 HTTP/3 时,优先用 quic-go 的 http3.Transport 或 http3.Server;只有需要自定义 UDP、共享 socket 或多协议分流时,再接入 quic.Transport。199 收藏 -
Go 1.24+ 可以通过 http.Server.HTTP2 和 HTTP2Config.MaxConcurrentStreams 设置服务端 HTTP/2 并发流上限。本文区分每连接限制、全局请求并发和 Transport 的跨连接行为,给出配置与排查清单。130 收藏 -
Go fuzzing 可在回调入口用长度和字符规则筛选输入,再执行合法域性质断言。对比 return、Skip 和构造输入,并说明如何保留坏格式测试与控制成本。381 收藏 -
用 Go unsafe.StringData 读取字符串底层字节时,关键不是把 string 强行变成可写切片,而是保留原字符串所有者并封装只读访问。本文说明零拷贝视图的生命周期、空值和越界边界,以及哪些场景应该继续使用普通转换。350 收藏 -
Go map 可以在 range 遍历中删除已经判定过期的键,但新增键本轮是否出现没有保证。本文结合缓存清理场景说明直接删除、先收集再删除和延后新增的取舍。230 收藏 -
Go sort.Interface 稳定排序应使用 sort.Stable,切片可用 SliceStable;通过整数优先级案例说明严格比较、重复键等价关系、原始次序与自测方法。319 收藏 -
实现 fmt.Formatter 时,内部再次格式化原类型会重新进入 Format 方法。本文用基础类型转换和无方法类型拆开调用链,并说明 verb、flag 与嵌套字段的安全边界。314 收藏 -
bytes.Lines 返回一个按行迭代的 iter.Seq[[]byte],通常保留每行末尾的换行符,未以换行结束的末行也会被返回。本文说明它的边界,并对比 bytes.Split 与 bufio.Scanner 的适用场景。297 收藏 -
Go 的 SetMemoryLimit 是 runtime/debug 中的软内存上限,不会自动限制 map 缓存。本文用运行时预算、缓存硬边界和淘汰指标三层策略,说明怎样减少无界缓存导致的内存压力,以及为什么上限不能盲目设低。381 收藏