-
账号注销需同步清理token、缓存、服务注册及业务数据:token黑名单须持久化并前置校验;关联缓存需主动失效;服务注册须显式注销;业务数据应异步分步清理并留回滚窗口;跨系统需事件广播通知。
-
Go的http.Request不自动解析表单,必须显式调用ParseForm()或ParseMultipartForm(),否则r.Form和r.PostForm为空;r.FormValue("name")为空即因未解析;多值字段需用r.Form["role"]获取[]string;敏感操作须校验r.Method=="POST";建议封装表单绑定函数统一校验;各类请求体均需手动判型解析并释放资源。
-
最稳妥方式是os.LookupEnv:返回value和ok两个值,可明确判断环境变量是否存在;os.Getenv仅返回字符串,查不到时静默返回空串,易导致后续panic。
-
Go文件上传必须先调ParseMultipartForm,否则r.FormFile和r.MultipartForm.File均失效;常见错误是未调用或调用过晚(如在FormValue后),导致返回http.ErrNotMultipart。
-
真正的优雅关闭是等待HTTP请求完成、后台goroutine收尾、数据库连接池清空后再退出;需用context统一驱动server.Shutdown()、db.Close()及自定义goroutine退出,并为DB操作设超时避免卡死。
-
使用fmt.Errorf配合%w可包装错误并保留原始信息,通过errors.Unwrap、Is和As能提取或判断错误链中的具体错误,支持多层上下文添加与精准处理。
-
GORM软删除本质是更新DeletedAt字段而非物理删除,需用*time.Time类型并嵌入gorm.Model;Delete()默认软删,Unscoped().Delete()才硬删;查询默认过滤软删数据,关联预加载不自动过滤。
-
Go中exec.Command不支持shell管道语法,需显式调用sh:exec.Command("/bin/sh","-c","ls|grepmain");StdoutPipe()须在Start()前调用,且cmd1与cmd2均需Wait()并正确关闭管道。
-
因为Scan要求参数为字段地址且顺序类型严格匹配,而结构体字段命名、大小写、跳过标记等与SQL列名不一致;需用反射结合dbtag实现列名到导出字段的自动映射,并注意NULL处理、缓存优化及类型兼容。
-
Go语言通过net包实现TCP通信,服务端使用net.Listen监听端口,Accept接收连接并用goroutine处理;客户端通过net.Dial发起连接,利用net.Conn进行读写。示例展示回声服务:服务端接收消息后回显,客户端发送输入并打印响应。关键点包括并发处理、连接管理和数据流控制,体现Go在网络编程中的简洁与高效。
-
slog默认不支持级别过滤,需自定义Handler实现:通过LevelFilterHandler包装标准Handler,在Handle方法中判断rec.Level>=minLevel决定是否输出。
-
Go模块缓存通过本地存储提升构建效率,路径默认为$GOPATH/pkg/mod,优先读取缓存并校验完整性;当出现依赖不一致、缓存损坏或磁盘不足时,可使用goclean-modcache清除全部缓存,或手动删除特定模块缓存,配合gomoddownload重新拉取、gomodverify校验一致性;建议日常避免频繁清理,CI/CD中定期重置,提交go.sum,监控缓存大小以优化依赖管理。
-
Go中享元模式无需传统OOP结构,核心是用sync.Pool缓存临时对象或包级变量共享不可变状态;sync.Pool适用于高频创建销毁的无引用临时对象,需重置;包级变量比sync.Map更高效于只读共享。
-
net.DialTimeout是Go检测端口开放最直接可靠方式,一行代码conn,err:=net.DialTimeout("tcp","127.0.0.1:22",2*time.Second)即可:err为nil表示端口开放;超时多为过滤,connectionrefused为关闭,noroutetohost为主机不可达;并发需控速,内网50–100、公网10–30,用带缓冲channel限流。
-
Go单元测试应优先使用标准testing包,测试函数须以Test开头、接收*testing.T参数并置于同包的_test.go文件中;推荐用t.Run组织子测试、t.Parallel加速并发、避免t.Fatal滥用,并通过接口抽象解耦依赖。