-
应优先使用结构化日志器(如zap或slog)显式脱敏敏感字段,避免字符串拼接和全局正则替换;对HTTP请求、error等需递归遍历并清洗嵌套敏感值,确保覆盖header、body、stacktrace及error链中所有潜在泄露点。281 收藏 -
Go的error接口仅含Error()string方法,任何实现该方法的类型即为error;标准库errors.New返回私有结构体errors.errorString;自定义error需实现该方法,推荐用指针接收者struct携带上下文字段,并可选实现Unwrap()以支持errors.Is/As和fmt.Errorf("%w")包装。281 收藏 -
Go的select语句本身不会丢弃已就绪的通道事件;当通道发送(如timer.C)发生时,若无goroutine立即接收,该发送将阻塞等待,直到下一次select准备就绪并成功接收——数据不会被忽略或丢失。280 收藏 -
Go微服务中需自写BFF而非仅用反向代理,因其需实现跨服务数据聚合、字段裁剪、权限透传、错误码归一化等业务语义逻辑,核心是面向前端的协调与控制,而非简单转发。280 收藏 -
根本原因是Linux内核capability缺失,需用setcap授予权限或Docker中--cap-add透传;避免sudo,改用unix包替代已弃用的syscall。279 收藏 -
本文澄清MarGo并非独立安装的工具,而是GoSublime内置的核心组件;其源码已整合至GoSublime仓库,无需单独goget,正确使用方式是通过GoSublime自动管理。278 收藏 -
不用container/list实现LRU,因其MoveToFront触发频繁堆分配和接口装箱,GC压力大;应使用泛型化自定义结构体节点,避免逃逸与间接跳转,配合sync.RWMutex保护并发安全。278 收藏 -
Go单例不能仅靠包级变量实现,因并发下易出现竞态;必须用sync.Once延迟初始化并保证线程安全,且带错误返回的初始化需在Do内捕获错误。278 收藏 -
reflect.AssignableTo判断赋值兼容性而非类型相等,如*int可赋给interface{}但二者类型不同;判同一类型应直接用==比较reflect.Type。277 收藏 -
连接Redis集群前须确认集群已正确启动且至少含3主3从共6节点;Go客户端必须用redis.NewClusterClient并传入至少2–3个可连通的主节点地址,禁用localhost(Docker中改用host.docker.internal或服务名),避免跨slot命令如KEYS/SCAN。275 收藏 -
结论:Enum.name()安全稳定,返回声明字面量;toString()可被重写导致行为不一致,禁止用于映射;应使用自定义字段(如code/desc)+静态Map反查,禁用ordinal()作业务码。275 收藏 -
Go中符合单一职责的struct应仅保留数据字段和纯计算方法,I/O、加密等副作用逻辑须分离至独立类型并通过接口注入。275 收藏 -
tar.gz压缩失败主因是未调用gzip.Writer.Close(),导致gzip头尾缺失;路径穿越需用filepath.Clean()和Rel()校验;大文件应分块写入避免OOM;ModTime须显式赋值否则为1970年。274 收藏 -
值类型参数传递时会复制副本,函数内修改不影响原变量,需修改时应传指针。274 收藏 -
本文详解如何在Go语言中将形如2009-01-01T01:02:01.111+02:00的ISO8601带时区时间字符串,准确解析并转换为自Unix纪元起的UTC毫秒时间戳,涵盖标准库用法、格式要点、错误处理及常见陷阱。273 收藏