
golang
Go中可用组合+函数字段或接口实现模板方法模式:算法骨架在结构体方法中固定执行顺序,可变步骤通过func字段或接口方法注入,确保流程控制权明确且细节可定制。
应封装环境变量读取为结构体并集中初始化,避免裸用os.Getenv;推荐用caarlos0/env库自动处理默认值、类型转换与校验;配置字段须导出且带envtag;敏感字段禁用default,改用re...
Go中结构体默认浅拷贝,赋值时基本类型字段独立,但slice、map、指针、chan、func和interface{}字段共享底层数据;深拷贝需手动实现Clone方法或谨慎使用序列化。
错误分支测试需用errors.New/fmt.Errorf创建具名错误变量,通过errors.Is/errors.As精确断言;mock依赖时主动注入预设错误;注意defer中Close等可能出错的调...
推荐用多阶段构建:第一阶段用golang:alpine编译(需CGO_ENABLED=0和-ldflags="-s-w"),第二阶段用scratch或alpine:latest运行...
sort.Slice快但不稳定,相等元素顺序可能改变;sort.SliceStable稳定但稍慢,保证相等元素相对顺序不变,适用于分页、虚拟滚动等需可预期序的场景。
Go环境变量未生效是因VSCode未加载Shell配置的PATH,需在配置文件中添加Go路径并完全重启VSCode;必须使用golang.go插件和gopls,安装go.mod或go.work启用模块...
nil仅是六类引用类型的零值,非所有类型都支持nil比较;判断“空”需按类型区分,初始化方式决定nil或非nil状态,方法调用是否panic取决于是否解引用nil接收者。
用sync.Pool复用对象可显著降低GC压力,适用于创建开销大、生命周期短、可重置的无状态对象,需手动Reset并提供fallback创建逻辑,且不可依赖必然命中。
Go语言反射不直接参与RPC通信,仅被net/rpc等框架内部用于服务注册、方法查找和参数编解码;需满足导出方法、正确签名及字段导出等约束,否则调用时panic或静默失败。