-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathErrors.go
53 lines (44 loc) · 818 Bytes
/
Errors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package func main()
import (
"errors"
"fmt"
func f1(arg int) (int,error) {
if arg ==42 {
return -1,errors.New("can't work with 42")
}
return arg + 3 ,nil
}
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 42"}
}
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.lPrintln("f2 worked:",r)
}
}
_,e := f2(42)
if ae,ok := e.(*argError);ok{
fmt.Println(ar.arg)
fmt.Println(ae.prob)
}
}