Code Monkey home page Code Monkey logo

Comments (3)

drmingdrmer avatar drmingdrmer commented on May 16, 2024 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.

lishulong avatar lishulong commented on May 16, 2024

感觉直接定义成两个类型是不是会更通用一些?
一个是接口无关的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.

drmingdrmer avatar drmingdrmer commented on May 16, 2024

都没问题额...我关了啊...fork了 pkg/errors 到 openacid/errors. issue描述放过去了

from slim.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.