Source file
test/recover2.go
1
2
3
4
5
6
7
8
9
10
11
12 package main
13
14 import "strings"
15
16 var x = make([]byte, 10)
17
18 func main() {
19 test1()
20 test2()
21 test3()
22 test4()
23 test5()
24 test6()
25 test7()
26 }
27
28 func mustRecover(s string) {
29 v := recover()
30 if v == nil {
31 panic("expected panic")
32 }
33 if e := v.(error).Error(); strings.Index(e, s) < 0 {
34 panic("want: " + s + "; have: " + e)
35 }
36 }
37
38 func test1() {
39 defer mustRecover("index")
40 println(x[123])
41 }
42
43 func test2() {
44 defer mustRecover("slice")
45 println(x[5:15])
46 }
47
48 func test3() {
49 defer mustRecover("slice")
50 var lo = 11
51 var hi = 9
52 println(x[lo:hi])
53 }
54
55 func test4() {
56 defer mustRecover("interface")
57 var x interface{} = 1
58 println(x.(float32))
59 }
60
61 type T struct {
62 a, b int
63 c []int
64 }
65
66 func test5() {
67 defer mustRecover("uncomparable")
68 var x T
69 var z interface{} = x
70 println(z != z)
71 }
72
73 func test6() {
74 defer mustRecover("unhashable type main.T")
75 var x T
76 var z interface{} = x
77 m := make(map[interface{}]int)
78 m[z] = 1
79 }
80
81 func test7() {
82 defer mustRecover("divide by zero")
83 var x, y int
84 println(x / y)
85 }
86
View as plain text