0

golang错误处理是使用return error的方式,虽然能返回错误但是没法返回错误码,比如java中的exception内有msg有error code

在golang项目如果写几个接口,接口返回值里面有error code ,但是golang 从内部函数调用中返回的error是不带code的,这就让错误码失去了意义,如果再包装一个exception结构体的话,return这个exception,但是感觉这样破坏了golang函数返回error的规则

有没有好的办法实现,没有 try catch 好麻烦

2019-07-05 提问

查看全部 4 个回答

0
package main

import (
    "errors"
    "fmt"
)

const (
    UnknownErrorCode = -1
)

func New(code int, text string) error {
    return &ErrorCode{code, text}
}

type ErrorCode struct {
    code int
    s    string
}

func (e *ErrorCode) Error() string {
    return e.s
}

func (e *ErrorCode) Code() int {
    return e.code
}

func ErrorToErrorCode(err error) *ErrorCode {
    if err == nil {
        return nil
    }

    errorCode, ok := err.(*ErrorCode)
    if ok {
        return errorCode
    }

    return New(UnknownErrorCode, err.Error()).(*ErrorCode)
}

func main() {
    e1 := t1()
    e2 := t2()

    ec1 := ErrorToErrorCode(e1)
    ec2 := ErrorToErrorCode(e2)
    ec3 := ErrorToErrorCode(nil)

    fmt.Println(ec1.Code(), ec1.Error())
    fmt.Println(ec2.Code(), ec2.Error())
    fmt.Println(ec3)

}

func t1() error {
    return New(100, "test1")
}

func t2() error {
    return errors.New("test2")
}

程序输出:

100 test1
-1 test2
<nil>

推荐答案

1

go 1.14 将加如try 函数,期待ing.

推广链接