Skip to content

gRPC Error Wrapper #7

@sinmetal

Description

@sinmetal

WHAT

gRPCのerrorをいい感じにWrapする方法を考える。
選択肢的には以下のどちらか。
どっちもどっちみたいな気持ち

fmt.Errorf(": %w" err) でwrapしたものを剥いて、status.Status を取り出す

以下のようなやつ

func UnwrapGRPCError(err error) (*status.Status, bool) {
	cerr := err
	for {
		sts, ok := status.FromError(cerr)
		if ok {
			return sts, true
		}
		nerr := errors.Unwrap(cerr)
		if nerr == nil {
			return nil, false
		}
		cerr = nerr
	}
}

https://github.com/sinmetal/til/blob/51fd3cc40761e95b77dee6168be5d436d7cc1f7e/datastore/tx/cloud_datastore_service.go#L45

status.Status を内包する Custom Error を作る

WHY

gRPC の error は Wrap すると、gRPC package の関数では取り出せない

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions