Go语言技术文章
-
Go 命令行表格不要手工补空格,使用 text/tabwriter 把每列写成制表符终止的单元格,再调用 Flush 输出。本文说明 NewWriter 参数、尾部制表符、中文宽度和适用边界。233 收藏 -
Go 的 time.Parse 不使用 yyyy-MM-dd 这类占位符,而是用 2006-01-02 这组参考时间。本文从最小修复、错误判断、时区和格式化几个方面说明如何排查日期解析失败。233 收藏 -
Go 1.22 之后,ServeMux 不按注册先后决定路由,而是比较方法、主机和路径对应的请求集合。本文用字面量、单段通配符、尾部通配符和方法模式说明什么叫更具体,为什么有些模式会在注册时直接冲突。233 收藏 -
Go 的 gzip.Reader 默认会把多个 gzip 成员拼成一条解压流。需要逐个识别成员结尾时,应关闭 Multistream,在单成员读取到 io.EOF 后用 Reset 判断下一个成员,并区分正常结束、截断和校验错误。233 收藏 -
用 S ~[]E 接收普通或命名切片,再通过 func(E) R 做逐元素转换;同时说明数值类型参数可以显式转换,但 []E 不能整体隐式变成 []R。233 收藏 -
多层 bufio.Writer 中,外层 Flush 只会把缓存交给下一层;本文用 Buffered、底层写入计数和 Sync 区分每一层的状态,避免误判数据已经到达文件或已经落盘。233 收藏 -
Go 的 QueryRow 查询不到记录时,错误会在 Scan 阶段以 sql.ErrNoRows 返回。本文从查询条件、errors.Is、NULL 字段、类型转换和上下文五个角度排查,区分无数据与真正的数据库故障。233 收藏 -
sql.NamedArg 只把名称和值交给 database/sql 与具体驱动,并不会统一不同数据库的命名占位符。本文说明名称校验、驱动能力和 SQL 语法三个拒绝点,并给出可直接套用的排查代码。233 收藏 -
讲清 Go bufio.Reader.ReadSlice 遇到超长行时的 ErrBufferFull 语义、切片生命周期与分片处理方法,并加入单行上限、换行符和 EOF 策略。233 收藏 -
解释 Go net/http 中 ResponseController.EnableFullDuplex 的适用边界,给出 HTTP/1 请求体与响应交错处理的最小示例、协议判断和中间件兼容检查。232 收藏 -
Go crypto/rand.Reader 的类型是 io.Reader,固定长度随机字节不能假设一次 Read 填满缓冲区。本文用 io.ReadFull 处理短读,并解释 n、EOF 与错误的判断边界。232 收藏 -
通过 Go testing.T.Cleanup 的资源夹具示例,说明同一个测试对象为何按后注册先执行,并梳理父子测试、失败路径与并行测试的清理边界。232 收藏 -
Go url.JoinPath 适合拼接已经转义的 URL 路径元素,但不会替业务判断用户权限。本文说明如何限制用户值为单一路径段,并处理函数版、方法版、路径清理和 %2F 边界。232 收藏 -
io.LimitReader 达到上限后也会返回 EOF,无法单独证明输入是否超长。本文用 limit+1 探测窗口区分自然结束、超长截断和底层读取错误,并给出可复用的 Go 封装。232 收藏 -
围绕 Go net/http Client 讲清 Transport 复用、Response Body 关闭、读到 EOF、状态码判断和异常场景检查清单,给出可复用的请求封装方案。232 收藏