Comments (3)
跟树龙bb完, 做点调整, 各位在看下求完善, 修改更新到最上面的issue描述了:
-
设计数据结构的前提假设:
- 模块的用户, 90% 只判断有没有err, 不判断err是什么.
- 每个模块定义自己本层的错误, 但提供接口允许用户在需要时拿到最底层的错误(例如errno等).
- 避免直接向上传递错误(上层模块拿到底层错误用处不大, 例如创建block时只得到一个permission deny的errno, 无法有效的定位到到底是哪个文件/目录出现了问题).
- error的设计目标是为了简化查错, 提供完整的日志, 方便统计分析, 出错时的整条调用链的检查.
-
去掉Message属性, 必要时可以通过Code和Resource生成出来. 只提供一个Message接口用来输出message.
-
完善下例子, 增加resource的示例, 再加1个fs相关的例子.
-
希望这个模块可以作为go的errors包的无修改替代品, 和 https://github.com/pkg/errors 的无修改替代品.
-
提供一个方便的接口让用户直接取得最底层的错误.
from slim.
感觉直接定义成两个类型是不是会更通用一些?
一个是接口无关的slim的error类型;一个是aws的错误类型,包含Code,Message和Resource。
而且感觉要通用一点的话,slim自己的错误类型继承标准error会好一些,自定义的error可以作为标准error,给引用slim的其他项目使用。类似:
package main
import (
"errors"
"fmt"
)
type MyError struct {
error
ExtraInfo string
}
func (err *MyError) Error() string {
return fmt.Sprintf("msg: %s, extra: %s", err.error, err.ExtraInfo)
}
//func ToError(err MyError) error {
//}
func New(err error, extra string) *MyError {
stdErr := err
switch err.(type) {
case *MyError:
fmt.Println("arg err is instance of MyError")
stdErr = err.(*MyError).error
default:
fmt.Println("arg err is instance of standard error")
}
return &MyError{
error: stdErr,
ExtraInfo: extra,
}
}
func main() {
err := errors.New("this is standard error")
myErr := New(err, "extra error info")
// fmt.Printf("lsl-debug: type: %T\n", err)
// fmt.Printf("lsl-debug: type: %T\n", myErr)
// fmt.Println(err)
// fmt.Println(myErr)
// MyError as standard error
myErr2 := New(myErr, "extra error again")
fmt.Println(myErr2)
}
输出:
☛ go run test.go
arg err is instance of standard error
arg err is instance of MyError
msg: this is standard error, extra: extra error again
from slim.
都没问题额...我关了啊...fork了 pkg/errors 到 openacid/errors. issue描述放过去了
from slim.
Related Issues (20)
- Weekly Digest (10 February, 2020 - 17 February, 2020)
- Weekly Digest (16 February, 2020 - 23 February, 2020)
- Weekly Digest (5 April, 2020 - 12 April, 2020)
- Weekly Digest (12 April, 2020 - 19 April, 2020)
- Weekly Digest (19 April, 2020 - 26 April, 2020)
- Weekly Digest (26 April, 2020 - 3 May, 2020)
- Weekly Digest (3 May, 2020 - 10 May, 2020)
- Weekly Digest (28 June, 2020 - 5 July, 2020)
- Weekly Digest (5 July, 2020 - 12 July, 2020)
- Weekly Digest (12 July, 2020 - 19 July, 2020)
- Weekly Digest (19 July, 2020 - 26 July, 2020)
- Weekly Digest (26 July, 2020 - 2 August, 2020)
- Weekly Digest (2 August, 2020 - 9 August, 2020)
- Do I have to organize the keys in memory to use slim? HOT 1
- Organising the Key Offsets HOT 15
- Possible to show GC performance on... a few variations? HOT 1
- 文档: 如何更新/删除key HOT 4
- encode.String16: panic: runtime error: index out of range [0] with length 0 HOT 1
- Probabilistic structure (bloom-filter-like) or a guaranteed structure? HOT 4
- scan only one key slim trie HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from slim.