Go Example--错误处理

package main

import (
	"errors"
	"fmt"
)

//定义一种错误类型
type argError struct {
	arg int
	prob string
}

//实现错误方法
func (e *argError) Error()string  {
	return fmt.Sprintf("%d - %s",e.arg, e.prob)
}

func f2(arg int)(int,error)  {
	if arg == 42 {
		return  -1, &argError{arg,"can't work with it"}
	}
	return arg+3,nil
}

func main()  {
	for _,i:=range []int{7,42} {
		if r,e := f1(i);e!=nil {
			fmt.Println("f1 failed:",e)
		}else {
			fmt.Println("f1 worked:",r)
		}
	}
	for _,i:= range []int{7,42} {
		if r,e := f2(i); e!= nil {
			fmt.Println("f2 failed:",e)
		} else {
			fmt.Println("f22 worked:",r)
		}
	}

	_,e := f2(42)
	if ae,ok := e.(*argError);ok {
		fmt.Println(ae.arg)
		fmt.Println(ae.prob)
	}
}

func f1(arg int)(int ,error)  {
	if arg == 42 {
		return -1,errors.New("can't work with 42")
	}
	return arg+3, nil
}

原文地址:https://www.cnblogs.com/promenader/p/9800119.html