跳到主要内容

定义错误

syntax = "proto3";

package helloworld.v1;

import "errors/errors.proto";

option go_package = "hello/api/helloworld/v1;v1";
option java_multiple_files = true;
option java_package = "helloworld.v1";
option objc_class_prefix = "APIHelloworldV1";

enum ErrorReason {
option (errors.default_code) = 500;

GREETER_UNSPECIFIED = 0 [(errors.code) = 400];
USER_NOT_FOUND = 1 [(errors.code) = 404];
}

使用错误

package service

import (
v1 "hello/api/helloworld/v1"
kerrors "github.com/go-kratos/kratos/v2/errors"
)

func (s *GreeterService) SayHello(ctx context.Context, req *v1.HelloRequest) (*v1.HelloReply, error) {
if req.Name != "kratos" {
return nil, kerrors.NotFound(v1.ErrorReason_USER_NOT_FOUND.String(), "用户不存在")
}

if req.Name == "" {
return nil, kerrors.BadRequest(v1.ErrorReason_GREETER_UNSPECIFIED.String(), "名称不能为空")
}

g, err := s.uc.CreateGreeter(ctx, &biz.Greeter{Hello: req.Name})
if err != nil {
return nil, err
}

return &v1.HelloReply{Message: "Hello " + g.Hello}, nil
}

错误响应

得到了一个很好的错误信息 ![[Pasted image 20250828141849.png]]