Go语言技术文章
-
Go 反射修改字段时 CanSet 为 false,通常是值不可寻址、字段未导出或取错了 Value 层级。本文用一个小型反射检查器说明安全修复方式,并解释 unsafe 为什么不能直接把原 Value 变成可设置。463 收藏 -
本文解释 Go 泛型约束 comparable 的类型集合与设计边界,说明切片、map、函数和接口为何不能一概而论,并用泛型去重函数展示 Go 1.20 之后的约束满足规则与运行时风险。414 收藏 -
Go泛型方法调用受约束承诺限制。本文用批量提取名称的示例解释值接收者、指针接收者与接口准入,比较多类型模块接入中的能力接口、切片选择和nil边界。221 收藏 -
Go regexp.Regexp.ReplaceAllStringFunc 适合让每个匹配结果参与替换计算。本文对比固定模板替换,说明回调参数、$ 字符边界、未匹配文本保留和迁移检查方式。212 收藏 -
Go 中向已关闭 channel 发送会触发 panic。本文解释 close 后的发送、接收与再次关闭规则,并给出单生产者、多生产者和接收者提前退出时的安全责任划分。375 收藏 -
sync.Cond.Wait 没有 context 参数,直接等待可能让取消中的 goroutine 长时间阻塞。本文用 context.AfterFunc 配合同一把 Locker 唤醒等待者,给出 WaitContext 封装、竞态边界和 channel 替代条件。354 收藏 -
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 收藏