Go语言技术文章
-
Go io.CopyN 要求复制满指定字节数。本文用完整复制、源数据不足和目标写入失败三个场景,说明如何结合 written 与 error 做准确判断。160 收藏 -
Go tview 中,后台 goroutine 不要直接修改界面 primitive。把变更放进 Application.QueueUpdate 或 QueueUpdateDraw:前者只保证串行执行,后者执行后立即重绘;事件处理器内部则直接修改并交给主循环绘制。159 收藏 -
Badger 的 Value 回调参数只适合在回调内读取,ValueCopy 则把值复制到调用方切片。本文对比两种接口的生命周期、资源释放和长事务中的选择方式。159 收藏 -
bbolt 的 View 回调里再次调用 Update 可能长期阻塞。本文解释单写事务与读事务的生命周期关系,给出读取结果复制到事务外、再独立写入的处理方式,以及回滚、告警和复盘清单。158 收藏 -
Windows 下 filepath.Rel 遇到 C: 和 D: 这样的不同盘符时不能构造相对路径。本文解释 VolumeName 与 Rel 的边界,给出同盘计算、跨盘兜底和测试约定,避免把错误吞掉。157 收藏 -
Go database/sql 查询只取前几行时,提前 break 并不会替调用方表达完整的资源释放意图。本文从 Rows 的接口职责出发,说明为什么拿到结果集后应尽早安排 Close,并区分 Scan、Rows.Err 与 Close 的错误处理边界。157 收藏 -
Go URL.ResolveReference 的基础路径末尾斜杠会改变相对路径合并位置。通过目录前缀对照和四条表驱动用例,区分目录基址、当前页面、根路径与查询引用,避免错误拼接。157 收藏 -
用tea.Batch并发启动互不依赖的命令,将耗时操作放入Cmd闭包,并用独立消息更新模型状态。示例讲清结果无序、完成标记与后续任务依赖的处理方式。157 收藏 -
Go 的 archive/tar 适合流式读取归档。本文区分 Header 与 payload,演示只保留文件头元数据、用固定缓冲区消费内容,并说明超大条目和异常归档的内存控制边界。155 收藏 -
Go 的 net.Resolver.LookupAddr 反向解析返回的是名称切片,遇到多个 PTR、部分结果、无记录或超时不能只判断一个字符串。本文用带超时的示例说明如何保留可用结果、分类处理错误,并把结果整理成稳定日志字段。155 收藏 -
用一个小型 Go 任务队列说明 sync.Cond.Signal 与 Broadcast 的选择边界:单个资源变化唤醒一个等待者,全局条件变化广播全部等待者,并解释 Wait 为什么必须放在 for 循环里。152 收藏 -
big.Int.SetString 的 base=0 会根据 0b、0o、0 或 0x 前缀选择实际进制;显式 base 则按固定进制读取文本。本文用 Go 示例区分两种模式、失败返回值和下划线边界。151 收藏 -
Go 的 http.Server.ErrorLog 专门接收连接接收失败、Handler 异常行为和底层文件系统错误。本文按工作流说明如何创建自定义 log.Logger、注入 Server、理解 nil 默认行为,并区分它与业务访问日志。151 收藏 -
接口断言成功只说明当前动态类型满足目标类型,不能证明 type switch 已覆盖全部输入。本文用 Go 示例定位遗漏 case,并补上 default 兜底和表格测试。149 收藏 -
goquery 的 Text 会递归读取选中节点及其后代文本节点,所以父元素中的标题、段落和嵌套标签文字都会被合并。本文说明它的实现语义、常见误解和可控提取方式。148 收藏