2.4 KiB
		
	
	
	
	
	
			
		
		
	
	RPC Errors
All service method handlers should return nil or errors from the
status.Status type. Clients have direct access to the errors.
Upon encountering an error, a gRPC server method handler should create a
status.Status. In typical usage, one would use status.New
passing in an appropriate codes.Code as well as a description of the
error to produce a status.Status. Calling status.Err converts
the status.Status type into an error. As a convenience method, there is also
status.Error which obviates the conversion step. Compare:
st := status.New(codes.NotFound, "some description")
err := st.Err()
// vs.
err := status.Error(codes.NotFound, "some description")
Adding additional details to errors
In some cases, it may be necessary to add details for a particular error on the
server side. The status.WithDetails method exists for this
purpose. Clients may then read those details by first converting the plain
error type back to a status.Status and then using
status.Details.
Example
The example demonstrates the API discussed above and shows how to add
information about rate limits to the error message using status.Status.
To run the example, first start the server:
$ go run examples/rpc_errors/server/main.go
In a separate session, run the client:
$ go run examples/rpc_errors/client/main.go
On the first run of the client, all is well:
2018/03/12 19:39:33 Greeting: Hello world
Upon running the client a second time, the client exceeds the rate limit and receives an error with details:
2018/03/19 16:42:01 Quota failure: violations:<subject:"name:world" description:"Limit one greeting per person" >
exit status 1