-
os.Open仅支持只读且文件必须存在,os.OpenFile通过flag组合实现读写、追加、创建等全功能;权限参数在Windows下被忽略;deferf.Close()不防panic,需出错时手动关闭;大文件禁用os.ReadFile,应流式处理;路径拼接须用filepath.Join。
-
fmt.Errorf支持错误包装需用%w动词,%v会丢失嵌套关系导致errors.Is/As失效;正确写法是单%w包装可Unwrap的error,多层需链式调用,避免用errors.New等不可展开类型。
-
HTTPclient请求日志应使用io.TeeReader/io.TeeWriter旁路拷贝body,避免破坏流;全局日志用自定义RoundTripper,安全提取method、url、status_code、duration_ms等字段,禁用httputil.DumpRequestOut。
-
Go中float64百分比计算易因除零panic和浮点精度丢失出错;应优先用整数运算(如(num*100)/den)并检查分母为0,必要时用math.Round修复精度,金融场景才需decimal库。
-
io.Copy比os.ReadFile更适合大文件,因其用固定32KB缓冲区流式处理,内存恒定;而os.ReadFile会一次性加载全文件到内存,易导致OOM。
-
Go中TCP通信需注意:服务器用net.Listen监听并循环Accept+goroutine处理连接;客户端用Dialer设超时避免阻塞;Read需处理部分读取和关闭情况;关闭连接要先写后关,避免brokenpipe。
-
连接Couchbase需传节点地址(如"127.0.0.1")而非URL,显式配置用户名密码,TLS需手动设;Bucket须预创建并授权;操作用Upsert非Insert;Get需手动解析JSON并判err。
-
Go语言可通过结构体值拷贝、闭包或JSON序列化模拟备忘录模式,核心是安全保存与恢复对象状态而不破坏封装;需深拷贝避免引用污染,备忘录应不可变且字段小写,历史栈需管理索引与容量。
-
nilmap是未初始化的map,不能写入但读取安全;空map用make初始化,可读写。需写入时应使用空map,仅判断存在性可用nilmap。
-
gorun适用于快速验证逻辑,需packagemain和funcmain(),单文件直接gorunmain.go,多文件须显式列出全部;不生成二进制,每次重新编译,临时执行后清理,不适合部署。
-
sync.Map不是普通map的并发安全替代品,而是专为读多写少、键生命周期不一场景设计的最终一致性结构,不支持forrange、无len()、非原子遍历,性能在高并发读时优但频繁写时更差。
-
Go微服务中不能直接用net/http实现负载均衡,因其无客户端LB能力;应通过服务发现(如Consul)+客户端LB(如kitex)或ServiceMesh(如Istio)分层解决。
-
必须用CreateIndex而非EnsureIndex,因v1.0+驱动已弃用后者;需用mongo.IndexModel显式配置选项;Explain显示COLLSCAN说明索引未匹配;生产建索引应选低峰期并验证结果。
-
解决Go模块版本冲突需理解版本选择机制并合理使用gomod命令。常见冲突场景包括多依赖引入同一模块不同版本、主模块require版本与间接依赖不一致及包路径变更。Go构建时自动选用满足依赖的最高版本,但API不兼容仍可能导致编译错误。执行gomodtidy可清理未用依赖并补全缺失require,有时自动修复冲突。若存在多版本共存,可在go.mod中显式添加require语句统一版本,如require(example.com/some/modulev1.2.0),强制覆盖旧版以实现版本对齐。当某版本存在bu
-
GOPROXY不生效主因是GOPRIVATE或GONOPROXY优先级更高而拦截请求;需按匹配顺序排查,确认direct回退、HTTPS可达性、GONOPROXY前缀匹配规则及CI/CD环境变量继承。