-
Go标准库net/ftp仅提供客户端支持,无内置FTP服务端;需用第三方库如github.com/freddierice/go-ftp-server,手动实现FileSystem接口、处理PASV/PORT模式及权限校验。
-
httputil.NewSingleHostReverseProxy不能直接代理HTTPS后端,因其默认http.Transport会校验证书;需自定义Transport跳过验证(仅限测试)或设置ServerName,并在Director中显式更新Scheme、Host和req.Host。
-
在Go函数返回类型中,<-chanT(只读通道)与chanT(读写通道)虽在简单场景下均能运行,但前者通过编译期类型约束明确禁止向通道发送数据,从而提升代码安全性、可读性与意图表达能力。
-
GoModules是Golang依赖管理的核心工具,自Go1.16起默认启用,通过gomodinit初始化模块,生成go.mod文件记录模块路径与依赖版本;执行gobuild或goget自动下载依赖并写入go.mod和go.sum,后者用于校验依赖完整性;使用goget可指定版本、latest或主干分支更新依赖;gomodtidy清理未使用依赖;私有模块需配置GOPRIVATE环境变量并确保凭证正确;replace指令可用于本地调试但生产环境慎用;定期维护依赖避免技术债务。
-
.editorconfig在Go项目中易失效,因Go插件(如VSCode的golang.go、GoLand)默认禁用它以防与gofmt冲突;需手动开启支持,且仅应配置indent_style=tab和tab_width=4,避免indent_size等无效字段。
-
Gin框架中,c.Request.Body是一次性可读的io.ReadCloser,首次读取后即耗尽;若需在中间件和后续处理器中多次使用请求体(如JSONSchema校验+业务绑定),必须手动“捕获并重置”Body流。
-
Golang高并发需构建防雪崩体系:1.限流(固定/滑动窗口、并发数、分布式)防过载;2.熔断(错误率阈值、半开试探)阻连锁故障;3.超时与context控制资源生命周期;4.资源隔离与降级保核心可用。
-
gRPC是Go新服务首选,因生态成熟、跨语言、原生流式支持;Twirp仅适合简单POC或JSON兼容场景;Thrift和net/rpc在新项目中均不推荐。
-
正确设置需同时满足传输层和运行时条件:Secure仅在HTTPS下生效,开发时用r.TLS!=nil自动判断;HttpOnly防XSS且无兼容问题;SameSite必须显式设为Lax以平衡安全与可用性;优先用MaxAge控制过期。
-
Builder结构体返回指针而非值以支持链式调用:值接收器复制实例导致字段不累积,指针接收器共享状态使配置持续叠加;Build()应返回error而非panic以保障调用方可控;嵌套配置需通过中间Builder或函数式接口确保封装与链式;Builder不可并发复用,须每次新建实例。
-
Go中sync包提供Mutex保障共享数据读写安全、WaitGroup协调goroutine生命周期;Mutex需作为结构体字段配defer解锁,WaitGroup须先Add后启动goroutine并deferDone。
-
不能直接用errors.New("xxx")定义全局错误,因为每次调用都会创建新对象,导致==比较失败;正确做法是用包级var声明一次Sentinel错误变量,如varErrNotFound=errors.New("usernotfound"),并统一使用errors.Is判断。
-
Go中组合模式需用接口定义Component行为,容器节点嵌入切片存子节点,避免继承;注意递归安全、路径归一化、并发锁和封装性。
-
strconv.Atoi返回error时需用iferr!=nil检查并处理,不可忽略;可类型断言*strconv.NumError获取详情,用errors.Is(err,strconv.ErrRange)等标准方式判断错误类型;推荐封装SafeAtoi函数提供默认值,或改用更灵活的strconv.ParseInt。
-
Golog包不支持错误级别和结构化输出,需替换默认logger、补齐上下文、控制格式与目标;推荐zap/zerolog,记录error时保留错误链和调用栈,按严重性分流输出,避免无效日志。