-
mkcert生成的证书为什么浏览器不信任因为mkcert创建的是本地自签名根证书,不是公共CA签发的;浏览器默认只信任系统级受信根证书,而mkcert的根证书需要手动安装到操作系统(或特定浏览器)的信任链里。常见错误现象:NET::ERR_CERT_AUTHORITY_INVALID、CERTIFICATE_VERIFY_FAILED(Go程序报错)、curl提示SSLcertificateproblem:selfsignedcertificateincertific
-
goimports能替代gofmt,但还额外处理import:自动增删包、按字母序分组排序、合并/拆分标准库与第三方导入;gofmt仅格式化代码结构,不触碰导入语句。
-
必须补位。AES块大小固定为16字节,明文非16倍数时CryptBlocks会panic;需用PKCS#7补位(含整除时补16字节),解密后须校验补位值。
-
BFF层需组合多服务响应,net/http缺乏上下文取消、中间件等能力;gorilla/mux轻量可控,gin更易错误终止与数据共享;须防goroutine泄漏、安全解码JSON、环境化鉴权及统一错误处理。
-
gobuild必须显式指定包路径,如./cmd/app;工作目录需为模块根,否则报cannotfindmodule;交叉编译输出路径应含平台标识如bin/app-$(GOOS)-$(GOARCH),并预计算版本与时间戳。
-
Go禁止指针算术运算是因内存安全、GC可靠性、类型安全和平台一致性等根本原因;日常应优先用索引、range或encoding/binary等安全方式,仅在极少数系统级场景谨慎使用unsafe.Pointer。
-
Go中数组指针声明为*[N]T,初始化需取固定长度数组地址,解引用后可原地修改原数组,支持索引和len()但不可用append(),适用于固定大小缓冲区的零拷贝场景。
-
直接用OpenTelemetryGoSDK就够了,因其已提供生产就绪的tracing实现,覆盖span管理、上下文传播、采样和导出等全部核心能力,避免重复造轮子踩坑。
-
K8s的sessionAffinity:ClientIP失效主因是流量路径中IP被SNAT或Ingress/云LB二次转发掩盖;实操需绕过Ingress直连ClusterIP、确认kube-proxy模式、合理设timeoutSeconds(推荐10800),并应用层用Cookie+Redis补足会话保持。
-
必须确保map已初始化且反射值可寻址:nilmap需先用reflect.MakeMap初始化,key/value类型须严格匹配并显式Convert,struct字段需FieldByName后检查CanAddr和CanSet。
-
不能用time.Ticker实现令牌桶,因其仅支持固定节奏发放令牌,无容量限制与预存能力;真正的令牌桶需支持突发流量缓冲、恒定填充速率及超限拒绝,故须自行维护带容量和时间戳的状态。
-
json.Marshal默认不处理私有字段、不支持循环引用、nilslice/map输出null、time.Time转RFC3339字符串——均为设计选择;字段需首字母大写才导出,tag格式须正确,nil指针需omitempty防panic。
-
http.Client.Timeout不解决重试问题,因其仅控制单次请求总耗时并直接返回错误,不自动重试;需手动集成退避重试逻辑(如backoff.Retryv4),并精准判断可重试错误类型。
-
gomock报错“interfacehasunexportedmethods”是因为只支持mock首字母大写的导出方法;第三方非导出接口应通过包装暴露可导出接口;mockgen推荐用-source源码模式,Go1.18+需v1.6.0+;测试中须先EXPECT()再调用,结尾调Finish()校验。
-
要实现结构化日志,必须显式创建Logger实例:用slog.New(slog.NewJSONHandler(os.Stdout,nil))输出标准JSON,或slog.New(slog.NewTextHandler(os.Stdout,nil))输出可解析的key=value格式;所有字段须用slog.String、slog.Int等类型化构造函数,避免裸键值对导致!BADKEY;HTTP请求中通过中间件生成trace_id并用slog.With注入子logger;建议启用sloglint强制类型化属性和