go-zero中RPC服务需在config.yaml显式配置Etcd.Hosts和Service.Name并匹配客户端BuildTarget超时需同步调整服务端RpcServerOptions.Timeout和客户端context.WithTimeoutmodel空指针应通过errors.Is(err, sqlx.ErrNotFound)判断而非判nilAPI与RPC校验统一用types包共享结构体复用validate tag。go-zero 里 rpc 服务怎么注册到 etcd不配好服务发现rpc 调用会直接报 rpc error: code Unavailable desc connection error——不是代码写错了是根本连不上目标服务。关键在 etc/config.yaml或 config.yml里必须显式声明 etcd 配置且 service 的 Name 和 Etcd.Hosts 必须对得上Etcd.Hosts 是 etcd 集群地址比如 [127.0.0.1:2379]不能写成 http:// 开头Service.Name 要和客户端 zrpc.MustNewClient 里传的 BuildTarget 一致例如 etcd://127.0.0.1:2379/user.rpc 中的 user.rpc启动时加 -f etc/user.yaml 显式指定配置别依赖默认路径否则 etcd 配置不会加载为什么 zrpc 客户端调用总超时默认超时是 1 秒但实际网络业务处理常超过这个值尤其本地调试时 etcd 响应慢、或服务刚启还没 ready就会触发 context deadline exceeded。改法很简单但容易漏掉两处立即学习“go语言免费学习笔记深入”服务端 Server 启动时用 zrpc.RpcServerOptions{Timeout: 5 * time.Second} 扩大接收侧超时客户端调用前必须自己控制 context.WithTimeout比如 ctx, _ : context.WithTimeout(context.Background(), 3*time.Second)再传给 client.SomeMethod(ctx, req)别只改 client 侧——如果服务端处理逻辑卡在数据库或外部 HTTP1 秒照样熔断两边超时要匹配着调go-zero 的 model 怎么避免空指针 panic生成的 model 方法如 FindOne返回 *UserModel但数据库查不到时返回 nil直接取字段就 panic。 JoinMC智能客服 JoinMC智能客服帮您熬夜加班7X24小时全天候智能回复用户消息自动维护媒体主页全平台渠道集成管理电商物流平台一键绑定让您出海轻松无忧