Go问答技术文章
-
atomic.Value 虽然接收 any,但同一个 Value 的 Store、Swap 和 CompareAndSwap 必须保持一致的具体类型。本文解释首个 Store 的类型锁定、nil 规则、常见 panic 以及统一快照结构的改法。444 收藏 -
Go log/slog 的 ReplaceAttr 可以在属性写入前按字段名和分组路径做遮盖或删除。本文用一个可复用的脱敏函数说明 HandlerOptions 配置、零值 Attr 语义和实际边界。334 收藏 -
Go log/slog 的 LogValuer 会把昂贵计算推迟到日志事件确实需要处理时。本文用最小示例说明禁用级别、启用 handler、结构化 Group、脱敏和 Logger.With 的边界。318 收藏 -
Go slog Handler的方法允许并发调用。本文以日志封装迁移为例,说明派生对象、共享写入器、原子错误计数与业务字段的边界,给出委托JSONHandler的完整示例和回归场景。122 收藏 -
Go 使用 defer 和 recover 隔离一次 panic 时,还应在恢复现场调用 runtime/debug.Stack 保存调用堆栈。本文给出统一错误返回、日志上下文和 goroutine 边界的写法。138 收藏 -
Go fmt.Errorf 在格式串中包含多个 %w 时会保留多个错误分支。本文用自动化任务场景说明多错误关系、errors.Is 与 errors.As 的选择、nil 过滤、错误门禁和兼容边界。349 收藏 -
Go regexp.Regexp 可以用 MarshalText 导出正则文本,再用 UnmarshalText 恢复为可匹配对象。本文用配置字符串说明 JSON 保存、非法模式处理,以及 Longest 和 POSIX 状态不会随文本自动恢复的边界。370 收藏 -
Go 随机字节的标准base64输入可直接兼容真实CR/LF。本文给出带输入上限、32字节约束、错误丢弃和规范化输出的示例,说明Strict、空白字符、填充与认证边界。470 收藏 -
Go 验证码既要在生产环境使用安全随机源,又要让单元测试可重复。本文用一个可注入的随机整数接口,把 crypto/rand 与固定序列测试替身分开,并覆盖长度、字符表和错误处理边界。150 收藏 -
Go 中 crypto/rand 用于令牌、密钥和不可预测的随机值,math/rand 用于模拟、抽样、洗牌和可复现测试。本文用选择清单、代码示例和迁移边界说明两者如何分工。421 收藏 -
Go TLS Config.Clone 是浅克隆,修改共享切片、证书池或闭包状态仍可能引发竞态。本文给出 NextProtos 与 RootCAs 的隔离示例,说明使用后只读、回调依赖和配置切换边界。426 收藏 -
Go TLS 客户端应把域名写入 DNS SAN、IP 写入 IP SAN,并让 tls.Config.ServerName 与真实身份对齐。本文说明 CommonName 的兼容边界、SNI 与主机名校验的关系,以及如何避免用 InsecureSkipVerify 绕过问题。427 收藏 -
Go TLS 客户端自定义 CA 不生效,通常是证书池、RootCAs 或 HTTP Transport 没有接通。本文按证书输入、TLS 配置和请求客户端三层定位问题,并给出保留系统根证书的配置方式。168 收藏 -
Go 处理 tag=go&tag=web 这类重复查询参数时,应使用 url.Values 的切片模型:用 Add 追加、用 values[key] 读取全部值、用 ParseQuery 检查解析错误,并注意 Encode 的键名排序边界。163 收藏 -
Go 中普通表单字段读不到,常见原因不是字段名,而是 application/x-www-form-urlencoded 与 multipart/form-data 的请求体、Content-Type 和解析入口没有对应。本文按场景给出客户端与服务端的配对写法。418 收藏