Go语言技术文章
-
介绍Go fs.WalkDir遍历embed.FS并读取正文的方法,通过完整示例说明子树路径、回调错误和SkipDir,分析资源内嵌的部署收益与更新边界。144 收藏 -
Go 里只想按首个分隔符拆成前后两段时,strings.Cut 用 found 明确表达是否找到;需要多个字段并保留最后一段时,strings.SplitN 通过 n 控制拆分次数。本文用重复分隔符、缺少分隔符和边界参数说明两者的选择。144 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏 -
Go 泛型切片返回值要隔离外层修改,应分配独立数组并 copy。通过 PrefixCopy 示例区分共享视图、容量限制与浅拷贝,说明命名类型、nil、引用元素及迁移检查边界。143 收藏 -
Go查询参数应通过url.Values保存原始值并编码,再写入RawQuery。本文结合搜索链接说明已有参数、Set与Add、空值和重复编码,并区分查询编码、HTML转义与目标地址信任。143 收藏 -
go test -json 会把多个包的测试和构建信息写成交错的 JSON 事件流。本文说明如何用 Package 归档测试输出,用 Action、ImportPath 和 FailedBuild 识别构建事件,避免把日志归到错误的包。143 收藏 -
time.Ticker 的 C 通道不是可观测的任务队列,不能用 len 或 cap 判断业务积压。本文解释 Go 1.23 的同步 timer channel 变化,并给出非阻塞接收与显式 backlog 统计的写法。143 收藏 -
Rows.Columns 返回列名顺序,Rows.Scan 按位置写入目标地址。本文解释固定列与动态列的对应规则,并处理 NULL、Close 和 Err 的常见边界。143 收藏 -
Go Testify 的 mock.InOrder 可以把多个 *mock.Call 组合成相对顺序约束。本文用准备、保存、审计的测试场景说明如何保留参数、调用次数与 AssertExpectations,并划清组外调用和并发流程不应强行绑定的边界。143 收藏 -
Go time.After 放在 select 循环里会在每轮创建新的 Timer。本文解释持续就绪分支下的定时器积压、Go 1.23 的垃圾回收变化,以及如何用一个可复用的 time.Timer 配合 Stop、排空和 Reset 降低分配压力。143 收藏 -
Go io.ReaderAt 的短读不能简单当成失败或成功。本文说明如何保留 n 个有效字节,区分正常尾部 EOF、固定块中途 ErrUnexpectedEOF 与底层 I/O 错误,并封装安全的定长读取函数。143 收藏 -
用 net.ListenConfig.Control 在监听 socket 绑定前设置底层参数,再把批处理循环里的缓冲区复用与结果容量规划分开处理,避免把两类性能问题混成一个开关。143 收藏 -
go/types.Interface.IsMethodSet 用来判断接口是否完全由方法集描述。返回 true 的是普通 basic interface,返回 false 的接口包含类型元素或类型集合,只适合作为泛型约束。本文给出类型检查后的判定代码和迁移注意事项。143 收藏 -
Go 读取大文件的固定偏移数据时,可以用 os.File.ReadAt 直接写入目标缓冲区,不必把整个文件载入内存。本文说明 offset、短读、EOF、范围检查以及可复用的固定窗口读取写法。143 收藏 -
Go net/http 客户端不会把 Authorization 无条件带过重定向。本文说明跨域后敏感头为何被清除,并用 CheckRedirect 限制跨源跳转、处理响应体和错误。143 收藏