Go语言技术文章
-
Go archive/zip 里 Writer.Close、OpenReader.Close 和条目 ReadCloser 不是同一个关闭边界。本文用写入与读取示例说明如何收口资源,并在完整读取条目后捕获 zip.ErrChecksum、io.ErrUnexpectedEOF 等错误。452 收藏 -
Go maphash.Hash.Clone 可以从已有输入的中间状态复制出独立的 hash.Cloner。本文说明如何保留共同前缀、分别追加后缀,理解 Clone 返回值、错误处理、版本要求与并发边界。452 收藏 -
go/types.Info.InitOrder 不是简单按源码文件排序:有依赖的包级变量按拓扑关系排列,互不依赖的变量才回到源码位置顺序。本文用一个小型 AST 分析器拆开文件输入顺序、依赖关系和工具输出边界。452 收藏 -
constant.BoolVal 返回 false 不一定表示常量明确为假,因为 Unknown 也会返回 false。本文说明如何先检查 Kind,再安全读取布尔值并保留未知状态。452 收藏 -
Go 向已关闭 channel 发送会触发运行时 panic。关键不是发送前猜测 channel 状态,而是把关闭权交给能确认所有发送方已退出的唯一协调者;接收方提前结束时用 done channel 或 context 通知发送方停止。451 收藏 -
Go range 遍历字符串时,索引返回的是 UTF-8 rune 在原字符串中的字节起始位置,而不是连续的字符序号。本文用代码区分 byte offset、rune 序号、[]rune 和非法 UTF-8 的处理边界。451 收藏 -
Go regexp.Split 的 n 参数不是分隔符数量,而是返回子串数量上限。n<0 返回全部结果,n=0 返回 nil,n>0 最多返回 n 个子串并保留最后的未切分文本。451 收藏 -
Golang · Go问答 | 2个月前 | channel · 定时器 · select · time.After · Go问答 · Go timeafter怎么处理 Go time.After定时器 Go time.After循环 Go定时器读取 Go NewTimer与NewTicker
解释 Go time.After 返回值、循环等待与 time.Time 转换,比较 NewTimer 和 NewTicker 的使用边界,帮助排查定时器读取问题。451 收藏 -
多个 goroutine 往同一个 Go channel 发送数据时,关闭权应交给发送方之外的协调者;本文用 WaitGroup 统一等待并给出提前退出边界。451 收藏 -
Go 的 database/sql 提供了泛型 sql.Null[T] 来接收可能为 NULL 的列。本文从 Scan 指针、Valid 判断、零值区分和 driver.Value 类型边界四个方面说明可空字段的正确写法。451 收藏 -
Go 处理不可信图片时,先用 image.DecodeConfig 读取格式配置和宽高,再按 int64 像素预算决定是否进入 image.Decode,避免不必要的完整像素分配。451 收藏 -
Go 的 encoding/json 把 JSON 数字写入 int 时,如果数值超出目标类型范围,会返回 UnmarshalTypeError,而不是自动截断或安全放大。本文从溢出边界、错误定位、字段设计和 UseNumber 四个角度说明怎样处理。451 收藏 -
Go 的 Location 会影响时间的构造解释和展示,但不等于改变实际时间点。本文说明 Equal、Before、After 与 == 的区别,并处理 ParseInLocation、UTC、序列化和单调时钟的常见边界。451 收藏 -
Go 服务器调用 Shutdown 后仍可能因主协程提前退出、排空上下文已取消或外部期限到达而截断请求。通过原创服务示例拆解退出顺序、超时强制关闭和依赖收尾。451 收藏 -
用 go list -m -json 导出 Go 模块的路径、版本、目录、go.mod、替换关系和更新信息,说明连续 JSON 解析及主模块、构建列表、版本查询的边界。451 收藏