-
Go指针是存储变量内存地址的变量,通过&取地址、*解引用实现对原数据的访问与修改;用于函数内修改原值、避免大对象拷贝、构建链表等复杂结构,并因禁止指针运算和自动GC而更安全。
-
使用接口抽象和依赖注入可隔离Go单元测试中的外部依赖,通过mock对象或httptest模拟数据库、HTTP服务等,确保测试稳定高效。
-
根本原因是Go默认将私有模块视为公开模块,跳过认证流程;需通过GOPRIVATE显式声明私有域名并配合Git层凭证(HTTPS用PAT或SSH用密钥)才能正常拉取。
-
应使用r.URL.Query()获取query参数,而非r.FormValue();POST请求中r.FormValue()需先调用r.ParseForm()才有效;JSON请求须手动json.Decode(r.Body);路径参数需借助chi等路由库解析。
-
必须先用prometheus.MustRegister()将自定义指标注册到默认收集器,否则/metrics不会暴露;注册须在http.ListenAndServe()前完成,且不可重复调用,否则panic。
-
Go测试网络错误需用MockHTTPClient模拟异常,如超时、连接拒绝、5xx状态码、空body、JSON解析失败等,通过自定义RoundTripper或httptest.Server精确控制响应,并断言具体错误类型确保覆盖边界。
-
必须配置GOPRIVATE环境变量,否则Go工具链将私有模块误作公开模块经proxy访问而失败;还需配合Git认证配置和GOSUMDB=off或+insecure以解决拉取、校验及CI/CD问题。
-
Go程序容器内CPU忽高忽低主因是GOMAXPROCS未对齐CPU配额:运行时读取宿主机逻辑CPU数而非容器实际限额,导致goroutine在受限核上争抢;需通过cgroups或DownwardAPI动态设置GOMAXPROCS。
-
gotoolpprof导出火焰图需用-raw-lines参数生成折叠栈格式:gotoolpprof-raw-lines./myappcpu.pprof>stacks.txt;必须禁用strip,确保符号完整;再用flamegraph.pl渲染为SVG。
-
Go中iferr!=nil是核心控制流而非语法糖,需显式处理每个错误分支;避免err变量覆盖、缩进嵌套和字符串匹配错误;用errors.Is/As判断错误类型;panic仅用于真正不可恢复的初始化失败等场景。
-
http.Post默认不设Content-Type,JSON会被当text/plain导致415错误;须用http.NewRequest+Do并设application/json;json.Marshal错误不可忽略;结构体需jsontag;禁用手写JSON字符串;必须显式设超时。
-
crypto/rand.Read是Go中生成密码学安全随机字节的唯一正确方式,必须传入已分配长度的切片、检查error、避免模偏差,并使用拒绝采样或rand.Int生成安全整数;严禁使用math/rand或错误包装rand.Reader。
-
WaitGroup必须先wg.Add(n)再启动goroutine,且Done()须在goroutine内且仅调用一次;必须传指针避免复制;常与channel配合实现结果收集;复杂场景推荐errgroup.Group。
-
安装Git并配置用户信息,确保go命令能调用Git拉取模块;2.使用gomodinit关联模块名与Git仓库地址;3.配置SSH或PAT认证以访问私有仓库;4.通过gomodtidy验证外部依赖能否正常下载,确认集成成功。
-
Go测试规范核心是确保gotest稳定可维护地验证行为,需严格命名(_test.go、TestXxx)、禁用log.Fatal/os.Exit、用t.Fatal报错、表驱动控制粒度、合理隔离依赖。