Tag
Go通过io.Reader和io.Writer两个极简接口抽象读写操作,要求实现Read([]byte)(int,error)或Write([]byte)(int,error),支持任意类型组合;强调不可变性、单向流语义,禁止Seek/Peek等方法,鼓励包装而非继承,典型应用如io.Copy。
查看更多 2026-05-25
变量遮蔽会使:=看似声明实则赋值,导致外层变量(如err)被同名新变量完全遮蔽,引发defer错误、错误判断失效等静默故障;govet-shadow可检测同一作用域内遮蔽但默认关闭,需手动启用,而包级变量遮蔽需staticcheck等工具补充检测。
查看更多 2026-05-25
base64.StdEncoding.EncodeToString是最常用编码方法,将[]byte转为标准Base64字符串,需注意nil切片panic、无换行及填充要求;DecodeString必须检查error,非法字符、长度非4倍数或填充错误均导致失败;URL场景应使用URLEncoding避免+和/;大容量处理宜用Encode/Decode直接操作字节切片以避免内存拷贝。
查看更多 2026-05-24
应将并发组件抽象为接口以提升可测试性。例如用TimerProvider替代time.Timer,用EventHandler接口模拟回调,避免直接调用time.After、time.Sleep或暴露裸chan;每个测试需独立状态,禁用全局变量和init启动goroutine;测试须覆盖超时、取消、关闭等边界,并用runtime.NumGoroutine()检测泄漏。
查看更多 2026-05-24
Dockerfile中不能用gorun,因会重复编译且需Go环境;应多阶段构建:builder阶段用golang镜像gobuild生成静态二进制,运行阶段用distroless或alpine镜像COPY执行文件。
查看更多 2026-05-24
Interface()是reflect.Value转回原始Go值的唯一安全方法,用于解包可导出且可寻址的反射值;调用前须用CanInterface()检查,否则私有字段等场景会panic。
查看更多 2026-05-24
net/http不适合作为API网关,因其缺乏动态路由、熔断限流、鉴权等能力,且无法热加载配置、统一错误处理和安全转发;需用可插拔中间件链+服务发现+自研鉴权等构建真正网关。
查看更多 2026-05-24
t.Error和t.Errorf仅记录错误并继续执行,不终止测试;t.Fatal/t.Fatalf则立即终止当前测试函数。两者适用于不同断言需求:前者用于非关键错误提示,后者用于必须中断的失败场景。
查看更多 2026-05-23
原生map并发读写会panic,因扩容时无锁保护;sync.Map适用于读多写少场景;自封装RWMutex+map更可控;高竞争时可考虑分片map。
查看更多 2026-05-23
正常。从Go1.16起模块模式默认启用,GOPATH仅用于安装二进制工具(如$GOPATH/bin),不再存放项目源码;goenvGOPATH为空或返回默认路径均属正常,只要gomodinit和gorun能正常工作即可。
查看更多 2026-05-23
Demand feedback