和大家分享一个自己写的库 github.com/gota33/errors
主要用于结构化 error 的生成、编码和解码。目前自用下来还可以,欢迎试用及提出建议。
错误的描述信息是遵循 Google API design 设计的。
这里贴一个输出到控制台的例子,当然也是可以编码成 JSON 在 RESTful 服务间传递的。
更多的例子可以参考项目首页的文档。
// ...
err := Annotate(
context.DeadlineExceeded,
DeadlineExceeded,
StackTrace("heavy job"),
RequestInfo{RequestId: "<uuid>"},
LocalizedMessage{Local: "en-US", Message: "Background task timeout"},
LocalizedMessage{Local: "zh-CN", Message: "后台任务超时"},
)
fmt.Printf("%+v", err)
// Output:
// status: "504 DEADLINE_EXCEEDED"
// message: "context deadline exceeded"
// detail[0]:
// type: "type.googleapis.com/google.rpc.DebugInfo"
// detail: "heavy job"
// stack:
// goroutine 1 [running]:
// runtime/debug.Stack(0xc00005e980, 0x40, 0x40)
// /home/user/go/src/runtime/debug/stack.go:24 +0xa5
// github.com/gota33/errors.StackTrace.Annotate(0xfe36af, 0x9, 0x1056490, 0xc00005e980)
// /home/user/github/gota33/errors/detail.go:368 +0x2d
// github.com/gota33/errors.Annotate(0x1051780, 0x1257e60, 0xc00010fc00, 0x5, 0x5, 0xc00010fba8, 0x10)
// /home/user/github/gota33/errors/errors.go:79 +0x97
// github.com/gota33/errors.ExampleAnnotate()
// /home/user/github/gota33/errors/example_test.go:10 +0x251
// testing.runExample(0xfe589a, 0xf, 0xfff6c0, 0xfead08, 0x1a, 0x0, 0x0)
// /home/user/go/src/testing/run_example.go:63 +0x222
// testing.runExamples(0xc00010fed0, 0x120aee0, 0x3, 0x3, 0x0)
// /home/user/go/src/testing/example.go:44 +0x185
// testing.(*M).Run(0xc000114100, 0x0)
// /home/user/go/src/testing/testing.go:1419 +0x27d
// main.main()
// _testmain.go:71 +0x145
//
// detail[1]:
// type: "type.googleapis.com/google.rpc.RequestInfo"
// request_id: "<uuid>"
// serving_data: ""
// detail[2]:
// type: "type.googleapis.com/google.rpc.LocalizedMessage"
// local: "en-US"
// message: "Background task timeout"
// detail[3]:
// type: "type.googleapis.com/google.rpc.LocalizedMessage"
// local: "zh-CN"
// message: "后台任务超时"
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.