微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go语言错误处理小例子

满屏的error处理会是个悲剧,也不利于对错误进行区分处理。
建议在项目中多用自定义错误,再对错误集中处理。

package main

//error处理方式演示
//author: Xiong Chuan Liang
//date: 2015-2-26

import "fmt"
import "errors"

func main() {

	errType(test0())
	errType(test1(" test1 "))
	errType(test2(500))
	errType(test3(" test3 "))
	errType(test4(" test4 "))
}

type Error1 struct {
	arg    int
	errMsg string
}

func (e *Error1) Error() string {
	return fmt.Sprintf("%s",e.errMsg)
}

type Error2 struct {
	arg    string
	errMsg string
}

func (e *Error2) Error() string {
	return fmt.Sprintf("%s",e.errMsg)
}

func test0() error {
	return errors.New("errors.New() - test0()")
}

func test1(arg string) error {
	return fmt.Errorf("fmt.Errorf() - test1()")
}

func test2(arg int) *Error1 {
	return &Error1{arg,"Error1{} - test2()"}
}

func test3(arg string) error {
	return &Error2{arg,"Error2{} - test3()"}
}

func test4(arg string) *Error2 {
	return &Error2{arg,"Error2{} - test4() "}
}

func errType(err interface{}) {
	switch e := err.(type) {
	case *Error1:
		fmt.Println("Type:Error1 ",e)
	case *Error2:
		fmt.Println("Type:Error2 ",e)
	case error:
		fmt.Println("Type:error ",e)
	default:
		fmt.Println("Type:default ",e)
	}
}

/*
运行效果:
Type:error  errors.New() - test0()
Type:error  fmt.Errorf() - test1()
Type:Error1  Error1{} - test2()
Type:Error2  Error2{} - test3()
Type:Error2  Error2{} - test4()
*/



MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168

原文地址:https://www.jb51.cc/go/190556.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐