Home >Backend Development >Golang >How to customize errors in golang

How to customize errors in golang

尚
Original
2020-01-14 11:51:024556browse

How to customize errors in golang

There are two ways to define error exceptions in go, but both require your return value to be of type error.

func Control() error {
      //xxxx
}

The first way is to use the golang standard library package errors to define errors. The usage is very simple, just return errors.New(“string”) . This is the simplest error return.

The second way is to borrow the struct structure and create an Error() method of the struct. Note that the method name is Error, otherwise the following bug will occur and the Error method cannot be found.

./er.go:25: cannot use equalError literal (type equalError) as type error in return argument:
    equalError does not implement error (missing Error method)

The following is a relatively complete method of using Error. Not only errors, but also struct Error() method.

#http://xiaorui.cc
package main
 
import (
	"errors"
	"fmt"
)
 
type equalError struct {
	Num int
}
 
//方法名字是Error()
func (e equalError) Error() string {
	return fmt.Sprintf("你现在是数字是 %d ,还是超了55", e.Num)
}
 
func Equal(n int) (int, error) {
	if n > 55 {
		return -1, errors.New("超过了55") //生成一个简单的 error 类型
	}
	return n, nil
}
 
func DiyEqual(n int) (int, error) {
	if n > 55 {
		return -1, equalError{Num: n} // 会调用equalError的Error方法
	}
	return n, nil
}
 
func main() {
	//使用errors.New生成error对象
	if result, err := Equal(100); err != nil {
		fmt.Println("错误:", err)
	} else {
		fmt.Println("结果:", result)
	}
 
	//不适用erros,自定义错误方式.
	if result, err := DiyEqual(100); err != nil {
		fmt.Println("错误:", err)
	} else {
		fmt.Println("结果:", result)
	}
 
}

Related recommendations: golang tutorial

The above is the detailed content of How to customize errors in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn