-
生产环境Go镜像必须CGO_ENABLED=0静态编译,用scratch或alpine基础镜像;进程需优雅处理SIGTERM、实现/healthz健康检查;配置通过Secret/ConfigMap注入,禁止硬编码。
-
连接失败时应先确认Redis服务是否运行:macOS用brewserviceslist或redis-cliping,Linux用systemctlstatus或ps,Docker检查容器与端口映射,远程服务器需修改bind和protected-mode;务必使用github.com/redis/go-redis/v9,Addr不可省略,初始化后调用rdb.Ping(ctx).Result()验证连通性,所有操作必须传非nilcontext,Docker中连宿主Redis需用host.docker.inte
-
合法的Benchmark函数必须以Benchmark开头、接收*testing.B参数且无返回值;b.N由框架动态调整,b.ResetTimer()需在初始化后调用以排除准备开销。
-
Go语言用crypto/ssh执行远程命令的核心路径是:先ssh.Dial()获取*ssh.Client,再client.NewSession()创建会话,最后用session.Run()或session.Output()执行;client.Do()不存在,HostKeyCallback必须显式设置且不可复用session。
-
优先使用官方或社区验证的SDK(如dingtalk-open-sdk-go),避免手写HTTP客户端;access_token有效期2小时,需按应用类型正确获取并加锁缓存;Webhook加签需严格按timestamp+secret计算HMAC-SHA256;SDK初始化需校验环境变量、设合理超时、显式刷新token;POST请求体须匹配Content-Type。
-
errors.Is和errors.As不能直接判断自定义错误类型,因二者依赖Unwrap()实现错误链遍历,若自定义错误未实现Unwrap()(哪怕返回nil),则无法被识别;正确做法是显式实现Unwrap()方法。
-
Go中几乎没人实现3PC,因其无法解决网络分区下的CAP权衡,且成熟组件(如etcd、Raft)已提供更可靠的替代方案。
-
该用*T而不是T的情况包括:需修改原值、结构体含不可复制字段(如sync.Mutex)、体积大或字段多、实现指针接收者接口、JSON中需区分“未设置”与“设为零”、map中需修改原对象。
-
Seconds_Behind_Master不可靠,需结合Slave_IO_Running、Slave_SQL_Running状态及NULL判断;Go中须用sql.NullInt64接收,配置超时与只读账号;主从时钟偏差致其失真,应辅以GTID和心跳表打点验证。
-
子测试通过t.Run实现,支持命名、并发与过滤。使用t.Run定义子测试,注意变量捕获;通过-run标志运行指定子测试;调用t.Parallel()启用并发;共享setup/teardown逻辑提升效率。
-
Golang中直接文件读写效率低下,因频繁系统调用引发高昂上下文切换开销;bufio通过内存缓冲区聚合I/O操作,减少系统调用次数,显著提升性能。
-
用Golang写爬虫可通过net/http发起请求并用goquery解析HTML实现。首先安装goquery库,使用http.Get()或自定义Client发送GET请求获取页面内容,并设置必要的Header如User-Agent;接着用goquery.NewDocumentFromReader()加载HTML文档,通过类似jQuery的CSS选择器提取数据,如.Find().Text()或.Attr()获取文本和属性值;最后可将结果封装进结构体以便后续处理。注意事项包括关闭响应体、处理相对URL、控制请
-
Wire是编译前生成注入代码的工具,要求wire.go带//+buildwireinject标签、置于目标包内、仅含injector和wire.Build()调用;所有provider必须导出、签名清晰、无副作用,生成的inject.go需提交至Git。
-
GitHubCopilot目前不支持Go语言的自动补全,因其模型缺乏Go语义理解,无法识别go.mod、interface{}和泛型约束,常输出Python/JS风格错误代码;需依赖gopls进行类型校验与补全。
-
数组转切片可直接用[:]语法,共享底层数组;切片转数组需确保长度足够,推荐用copy安全转换,避免强制类型转换导致崩溃。