Go语言技术文章
-
Go errors.As 可以沿着 errors.Join 形成的错误树查找目标类型,并把首个匹配值写入目标指针。本文用可执行的类型化错误示例说明组合错误的遍历顺序、未命中处理和参数边界。465 收藏 -
charmap 是 8-bit 字符集编码器,无法覆盖所有 Unicode rune。本文说明如何用 EncodeRune 判断单个字符,用 Encoder 识别整段转换的错误边界,并选择拒绝、替代或 HTML 转义策略。465 收藏 -
Go Kong 的命令树来自 Go 结构体和标签:普通字段是 flag,带 cmd 标签的嵌套结构体才是子命令。本文从嵌套字段未生效的症状出发,给出二级命令、参数归属和 Run 方法的最小写法。465 收藏 -
Go Kong 同时设置 required 与 default 时,合法默认值也能满足必填。本文结合固定版本源码,说明显式输入、空字符串和业务校验的区别及改写方法。465 收藏 -
用 go-imap v2 的 UIDSearch 配合 SearchCriteria.Since 按日期筛选邮件,理解日期边界、UID 返回值和后续 Fetch 的衔接方式。465 收藏 -
Go 的 float64 可以作为 map key,但 NaN 不等于自身,所以写入后的 NaN 不能按原值稳定查回。本文解释插入、查找、删除的边界,并给出规范化键的写法。465 收藏 -
atomic 只保证参与原子操作的那次访问,不会自动把同一变量旁边的普通读写变成安全访问。本文解释混用产生数据竞争的原因,并给出统一 atomic 或改用 Mutex 的写法。465 收藏 -
Go strings.Reader.Len 返回当前位置之后的未读字节数。本文区分 Len、Size 和字符数量,说明 Read、ReadRune、ReadAt 对读取位置的影响,并给出稳定的读取循环写法。465 收藏 -
DecodeRuneInString 遇到非法 UTF-8 时返回 RuneError 和 1,而空字符串返回 RuneError 和 0。掌握 size 的含义,才能在逐字节清洗和校验循环中既不死循环,也不误删后续合法字符。464 收藏 -
Go 实现 UnmarshalJSON 时直接调用 json.Unmarshal 会递归。本文用定义类型切断方法集,再补上错误处理、业务校验和嵌套字段边界。464 收藏 -
Golang · Go问答 | 2个月前 | 重定向 · 排查 · Cookie · net/http · Go问答 · 重定向 Go Cookiejar http.Client CheckRedirect http.Cookie
Go http.Client 跟随重定向时,会在每个目标 URL 上重新咨询 CookieJar。Cookie 是否发送取决于目标域、Path、Secure 和有效期;Domain 未设置时是 host-only Cookie。本文用最小探针解释 CheckRedirect、CookieJar 与跨子域重定向的边界。464 收藏 -
Go 包装文件描述符、cgo 资源等外部句柄时,finalizer 可能在最后一次字段使用后提前运行。本文说明 runtime.KeepAlive 的准确位置、finalizer 闭包的常见陷阱,以及显式 Close 和 AddCleanup 的取舍。464 收藏 -
Go 中 os.Open 和 os.Stat 通常会跟随符号链接,os.Lstat 与 os.Readlink 则用于观察链接本身;Windows 还会受到链接权限、目标类型和卷路径处理影响。本文用一组小代码梳理不同打开方式,并给出跨平台读取与测试建议。464 收藏 -
Go fs.WalkDir 会在读取目录前先调用 WalkDirFunc。本文用最小可用代码说明如何返回 fs.SkipDir 跳过当前目录、用 fs.SkipAll 停止剩余遍历,并处理 err、根目录和普通错误边界。464 收藏 -
Go HMAC 验签应先统一签名编码,再比较原始 MAC 字节。本文说明 hmac.Equal 与 subtle.ConstantTimeCompare 的区别、长度处理和安全的请求校验流程。464 收藏