-
Go INI 的 Key 会把不存在的键转换成空值键,GetKey 才能保留缺失错误;MustString 则在键值为空时返回并写入默认值。本文用对照代码说明三者的边界和配置选择。
-
Go 的 SessionTicketsDisabled 会关闭 TLS 会话票据和 PSK 恢复支持,但客户端 ClientSessionCache 为空时也不会恢复。本文分清 TLS 恢复与 TCP 复用,说明客户端缓存、服务端票据和 ConnectionState.DidResume 的判断边界,并给出适合测试与安全策略切换的配置建议。
-
Go 的 go/ast.Inspect 看起来不生效,通常不是遍历函数没有执行,而是解析错误被忽略、回调类型筛选不匹配、return false 提前剪枝,或把 n == nil 的收尾回调误当成异常。本文从 ParseFile 到位置输出逐步拆解这些边界,并给出可直接改造的排查代码。
-
Go filepath.WalkDir 默认不会进入目录中的符号链接,这不是遍历失败,而是标准库刻意定义的边界。本文用最小目录树复现现象,再说明怎样读取链接本身、解析目标,并为显式递归补上循环保护。
-
Go 的 csv.Writer 会先把记录写入内部缓冲区,Flush 才把缓冲数据交给底层 io.Writer;因此逐条导出结束后必须在 Flush 之后检查 Writer.Error,才能发现最终提交阶段才暴露的失败。本文给出 Write、Flush、Error 的稳妥顺序,并比较 WriteAll 的返回值语义。
-
Go 中从 nil channel 接收会永久阻塞,因为 nil channel 永远不会就绪。本文区分 nil、未缓冲和关闭后的 channel,给出 make 初始化、select 超时与取消等待的处理方式,并说明关闭 nil channel 为什么会 panic。
-
Go reflect.Value.IsNil 在无效 Value 或不支持的 Kind 上会 panic。本文给出 IsValid 与 Kind 守卫示例,区分 nil 接口、typed nil、普通零值及接口容器,避免把防异常改动变成错误的业务判空。
-
Go 的 net/http.Client.Timeout 使用零值时代表不设总超时,连接、重定向和读取响应体都可能没有统一时间预算。本文解释零值语义,并给出 Client、Context 与 Transport 超时的分层写法。
-
Go fs.WalkDir 不会自动进入目录中的符号链接目标,但 root 自身是符号链接时会以目标作为遍历起点。本文拆开这两个边界,说明如何在回调中识别链接并按业务策略显式处理。
-
Go 的 url.URL.String 可以保留 # 后的 Fragment,但 RequestURI 只生成 HTTP 请求需要的路径与查询部分,因此看起来像是 Fragment 丢失。本文用最小示例说明两者的边界,并给出需要把片段信息传给服务端时的改造方式。
-
Go 的 url.URL 把 Path 保存为解码后的路径,RawPath 只是可选的编码提示。本文从一个路径编码不一致的场景出发,说明 RawPath 何时有效、何时会被 EscapedPath 忽略,以及如何避免双重编码。
-
Go CEL 的 Extend 返回新环境,不会自动更新旧 AST 和 Program。通过新增库存预留变量的示例,说明在目标环境重新 Compile、区分纯新增声明的兼容边界,以及按环境版本管理规则缓存。
-
Go 中关闭 channel 后仍可能读到零值,这是语言语义而不是异常。本文说明已发送值、关闭产生的零值、range 结束和 x, ok 接收之间的关系,并补充 nil channel、重复 close 与发送权限边界。
-
Go 模块路径和本地目录显示不一致时,先用 go env 确认主模块与工作区,再用 go list -m -json 对照 Path、Replace、GoMod 和 Dir,最后检查 require、replace 与 go.work 的作用范围。
-
Go 1.25 起可以用 os.Root.MkdirAll 在受限目录树内创建多级目录。本文说明 OpenRoot、相对路径、FileMode 权限参数、重复创建和迁移边界。