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
}