Go语言技术文章
-
Go 的 time.Duration 底层是纳秒计数,裸整数不会自动变成秒。本文用超时、重试和配置解析示例,说明如何显式绑定单位并避开截断与溢出。362 收藏 -
讲清 Go io.LimitReader 的字节上限与 EOF 语义,并用 http.MaxBytesReader 实现可识别超限错误的上传接口。362 收藏 -
bufio.Scanner 默认缓冲区遇到超长日志行会返回 ErrTooLong。本文用可复现的日志读取场景说明如何设置 Buffer、何时改用 bufio.Reader,以及怎样验证内存和错误边界。361 收藏 -
bufio.Writer.Flush 遇到底层 Writer 短写时,会把未写完的数据留在缓冲区并记住错误。本文用可控的 io.Writer 演示状态变化、错误传播和安全恢复边界。361 收藏 -
Go 按字节限制输出长度时,使用 utf8.RuneStart 找到 UTF-8 字符边界,并结合 utf8.Valid 与 DecodeRune 处理非法或不完整编码。361 收藏 -
Go channel 关闭后接收仍会得到元素类型的零值,不能只看 v 判断结束。本文用 comma-ok 区分有效零值、关闭空 channel 和 nil channel,并说明缓冲 channel 的正确消费方式。361 收藏 -
filepath.WalkDir 不会跟随符号链接进入目标目录,因为它按链接目录项本身判断 IsDir。本文用一个小型扫描器解释 DirEntry、Type、Info 与 EvalSymlinks 的边界。361 收藏 -
Go 的 encoding/xml 没有 xmlattr 关键字,XML 属性应使用 xml:"name,attr" 映射到导出字段。本文说明属性读取、嵌套元素、写回 XML、未知属性接收和常见空值排查方法。361 收藏 -
Go 反射中 reflect.Value.CanSet 返回 false 时,先用 CanAddr 区分不可寻址的值副本,再用 CanInterface 和字段导出状态识别只读字段;本文给出指针、Elem、字段诊断和安全修复示例。361 收藏 -
Go regexp 中点号默认不匹配换行。本文用最小示例说明 (?s)、(?s:...)、显式字符类和非贪婪量词的选择,帮助控制跨行范围并避免多条记录被一次吞并。361 收藏 -
围绕 Go html/template 的上下文转义实践,说明 HTML 正文、属性、URI 和 JavaScript 数据位置的差异,并梳理 template.HTML 等安全类型的使用边界。361 收藏 -
WithoutCancel 会保留父上下文中的值,但主动切断父级取消、截止时间和错误传播,所以 Deadline 返回 ok=false。本文说明这一设计,并给出为后台任务重新设置独立超时的安全写法。361 收藏 -
本文用 map[string]*list.Element 与 container/list 实现最近使用顺序:命中时 MoveToFront,新增时 PushFront,超容量时从 Back 淘汰,并说明节点归属、重复节点和并发安全等容易踩坑的边界。361 收藏 -
Go 页面共享布局时,先解析公共模板,再在首次执行前 Clone;每个副本解析自己的同名 content 定义,最后缓存并执行 layout,即可隔离首页、后台等页面变体。361 收藏 -
本文介绍如何使用 MongoDB 聚合管道与 Go(mgo.v2)实现类似 SQL IN 的多值匹配,并对嵌套数组(如 venueList.sum)中特定 name(如 "linux")对应的 value 字段进行跨文档求和。 本文介绍如何使用 MongoDB 聚合管道与 Go(mgo.v2)实现类360 收藏