-
用redis.Decr原子扣库存,避免SQL分步校验导致超卖;配合SETNX实现幂等下单;设置key过期时间并及时Incr回滚;禁用本地缓存与数据库唯一索引防重。
-
Go标准库可纯内存生成自签名TLS证书:用crypto/x509构建模板、crypto/rsa或ecdsa生成私钥、x509.CreateCertificate签发;须正确PEM编码证书和私钥,设置NotBefore/NotAfter、DNSNames(如{"localhost"}),并直接传入tls.X509KeyPair供http.Server使用。
-
MultiError是hashicorp/go-multierr提供的错误聚合工具,核心价值在于保留原始错误栈和支持增量追加;errors.Join会丢失调用链,而multierr.Append默认保留完整堆栈。
-
Go的net/http包内置轻量,几行代码即可启动Web服务器;通过http.HandleFunc注册处理器,用http.ListenAndServe监听端口;请求参数可从r.URL.Query()、r.FormValue()或json.NewDecoder(r.Body)获取;响应需用w.WriteHeader()设状态码、w.Header().Set()设头;路由可用默认ServeMux或gorilla/mux等第三方库;中间件通过包装http.Handler实现。
-
Go中枚举用const+iota是事实标准:需定义底层类型如typeStateint,显式绑定以保障类型安全;iota从0起始但可偏移(如+100)、占位跳过(\_=iota)或生成位掩码(1<<iota)。
-
httprouter是基于内存的高性能路由答案,因其纯内存压缩前缀树实现O(k)稳定匹配、无正则/中间件/Host匹配而极致轻量;gin在此基础上增加运行时回溯支持冲突检测与模糊匹配,以牺牲少量性能换取开发体验;手写路由需严守分段匹配、方法分离、预处理归一化三大约束。
-
gorilla/websocket吞吐量更高,因其连接生命周期管理更优:读写缓冲复用、预计算掩码、广播路径无锁分流、支持超时控制与端口复用,而标准库存在内存分配高、系统调用多、无熔断机制等瓶颈。
-
-ldflags-X能注入变量值,是因为Go链接器在链接阶段可覆盖顶层导出的字符串等基础类型变量的字面量初始值;变量必须是包级、首字母大写、类型匹配,且-Ximportpath.name=value中路径须与实际导入路径完全一致。
-
答案是合理使用反射需结合接口、泛型和类型校验以保障类型安全。应限制反射仅用于通用库、配置解析等必要场景,优先用接口或泛型处理已知类型;反射操作前后需校验类型和种类,及时转回接口或具体类型恢复编译时检查,并缓存类型信息提升性能,从而在灵活性与安全性间取得平衡。
-
gorun-race漏检是常态,因仅对实际执行路径插桩,不覆盖init中退出的goroutine、条件分支、unsafe/CGO、无交叠访问等场景;需用gotest-race-test.stress配合多路径测试和调度扰动才能有效暴露竞态。
-
协议层必须置于adapters或interfaces层,HTTP/gRPC/WebSocket等协议处理代码(路由、绑定、响应)不得进入usecase或domain;DTO与domain实体须显式单向转换,时间字段用Clock接口抽象,JSON/protobuf/dbtag严禁出现在domain中。
-
最省事又不翻车的是阿里云SDK——Twilio国内受限,阿里云文档清晰、签名封装完整,SendSmsRequest一行构造请求,但须用RAM子账号密钥、审核签名模板、带+86区号、TemplateParam严格匹配、Redis防重发、Lua分布式限流、查BizId回执、多通道降级。
-
需通过reflect.StructField.Tag.Get("json")获取字段的JSON别名,而非Lookup;Tag属于类型而非值,须从reflect.TypeOf((*T)(nil)).Elem()获取结构体类型后遍历字段。
-
应封装map[string]string为带sync.RWMutex的结构体,初始化在main中完成,键名统一小写去空格;词典文件用JSON格式存储,原子写入临时文件后重命名;增删查仅操作内存map,退出时持久化;CLI输入用bufio.Scanner替代fmt.Scanln。
-
最常用且最安全的用途是编译时注入Git哈希、构建时间、版本号等信息:声明未初始化全局变量(如varVersionstring),通过gobuild-ldflags"-Xmain.Version=v1.2.3"实现,注意-X格式为importpath.name=value且不可与gorun混用。