-
Go中表格驱动测试需用结构体切片定义用例,配合t.Run实现子测试;必须用tt:=tt避免循环变量捕获,字段命名要语义明确,错误比较用errors.Is而非==,禁用全局状态以防并发冲突。
-
Go标准库完全支持用crypto/tls和crypto/x509生成自签名证书,无需openssl;核心是构造x509.Certificate并调用x509.CreateCertificate签发,需设BasicConstraintsValid=true、IsCA=true、DNSNames/IPAddresses齐全,私钥用rsa/ecdsa生成并正确PEM编码。
-
Go原生http包无法执行JavaScript,因此无法直接获取AJAX加载后的内容;需通过模拟浏览器行为(如使用HeadlessChrome)或逆向分析AJAX接口来实现动态页面抓取。
-
Go编译共享库必须用-buildmode=c-shared,生成C兼容ABI的.so文件供C调用;导出函数需//export声明、参数返回值限C类型、须在main包中且含至少一个export函数、CGO_ENABLED=1为前提。
-
用atomic.AddInt64即可实现轻量并发安全计数,但仅适用于单操作原子性;涉及“先读后改”等复合逻辑时必须换sync.Mutex,多key统计需配锁或分片map。
-
Base64编码解码需严格匹配StdEncoding或URLEncoding,流式编码必须调用Close(),解码前须清洗空白字符;StdEncoding等常量可直接使用,无需复用优化。
-
gotest-bench是运行Go基准测试的基本命令,需在_test.go文件中定义以Benchmark开头、接收testing.B参数的函数,必须用gotest-bench=.(匹配所有)或-gotest-bench=BenchmarkAdd(指定函数)执行,并建议始终加上-benchmem以报告内存分配。
-
全链路加密需覆盖服务通信、配置加载、日志脱敏、数据落盘四环节;禁用InsecureSkipVerify,启用双向TLS;bbolt落盘须AEAD加密+KMS密钥;Envoy管传输层,Go管业务层加密;日志须结构化脱敏。
-
不够。Go原生errors.New和fmt.Errorf缺乏上下文、类型标识与结构化信息,无法支持错误分类、HTTP状态码映射、traceID提取及可恢复性判断,生产环境需自定义错误类型并合理使用errors.Join、Unwrap、Is等机制。
-
fmt.Sprintf最快但类型不匹配会panic,高频拼接用strings.Builder,SQL/HTML拼接禁用;动词需严格匹配类型,%s/%d/%f等有明确适用范围,宽度精度按rune或byte控制,动态参数用*,结构体打印优先%+v,敏感场景须用专用安全方案。
-
Go接口调用比直接调用慢,因需运行时解包类型信息、查itab取函数指针,引入间接跳转和分支预测失败;高频小开销场景(如百万次/秒Writer.Write)在火焰图中可见runtime.ifaceE2I等占比上升。
-
Go项目中.editorconfig需手动启用且仅4行有效:root=true、[]indent_style=tab、tab_width=4、[.{go,mod,tmpl}]end_of_line=lf等,其余字段会被忽略或干扰gofmt;VSCode需开启editorconfig.enableForGo,GoLand需勾选EnableEditorConfigsupport;缩进必须为ASCII\t(xxd验证),CI中应加入gofmt-l.校验。
-
默认http.DefaultTransport生产环境不可直接使用:无超时导致goroutine永久阻塞,MaxIdleConnsPerHost默认仅2引发高频建连,IdleConnTimeout为0致fd泄漏,且不处理Cookie与重定向。
-
req.Body只能读一次是因为其底层是不可重置的io.ReadCloser,Go标准库未缓存请求体以避免内存浪费和适配流式处理;常见解法是用io.ReadAll读取后通过bytes.NewReader和io.NopCloser重建可重读Body,或使用req.GetBody(需预先设置)。
-
常见错误是未检查响应体可读性、忽略resp.Body关闭及错误传播;需验证状态码范围、用io.Copy、defer关闭Body、处理重定向与路径安全、设置超时和进度反馈,并正确处理TLS证书及响应体错误。