Go教程技术文章
-
用 S ~[]E 接收普通或命名切片,再通过 func(E) R 做逐元素转换;同时说明数值类型参数可以显式转换,但 []E 不能整体隐式变成 []R。233 收藏 -
多层 bufio.Writer 中,外层 Flush 只会把缓存交给下一层;本文用 Buffered、底层写入计数和 Sync 区分每一层的状态,避免误判数据已经到达文件或已经落盘。233 收藏 -
讲清 Go bufio.Reader.ReadSlice 遇到超长行时的 ErrBufferFull 语义、切片生命周期与分片处理方法,并加入单行上限、换行符和 EOF 策略。233 收藏 -
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 收藏 -
从父 Context 的 Deadline 读取剩余时间,先预留收尾余量,再用比例与最大值计算子任务超时。本文给出可复用的预算函数,并说明无截止时间、预算耗尽和并发子任务的处理边界。232 收藏 -
io.ReadAll 写起来很短,但它会把输入完整收集到一个字节切片中。本文从大响应和未知长度输入的现场出发,解释 len/cap 增长、峰值内存与分块读取的边界,给出可复查的 Go 代码。231 收藏 -
Go log/slog 的 Logger.Enabled 会在日志参数处理前询问 Handler 是否接收当前级别。本文用可运行示例说明昂贵参数计算、slog.Attr 构造和 LogAttrs 的边界,避免关闭日志时仍付出无效成本。231 收藏 -
Go archive/zip 读取 ZIP 清单时,可以先访问 Reader.File 和 FileHeader,只拿名称、大小、压缩方式等中央目录信息;确认需要正文后再调用 File.Open。231 收藏 -
Golang · Go教程 | 2星期前 | go · https · Go crypto/tls按ServerName选择证书 tls.Config.GetCertificate ClientHelloInfo.ServerName Go SNI证书 Go多域名HTTPS
围绕 Go crypto/tls 的 ClientHelloInfo.ServerName,说明如何在 GetCertificate 中按 SNI 选择 tls.Certificate,处理未知域名、无 SNI 的默认回退,并区分 GetConfigForClient 的适用边界。230 收藏 -
Go 泛型切片算法不必一开始就抽象成复杂接口。本文从算法实际操作出发,讲清 []E 与 ~[]E 的选择、元素约束拆分、类型推断和命名切片边界。230 收藏 -
用 Go 的 weak.Pointer 做一个不会长期抓住对象的弱缓存,解释 runtime.KeepAlive、Load 与 GC 回收之间的边界,并给出可复现的并发读取写法。229 收藏