1// run 2package main 3 4import ( 5 "fmt" 6 "runtime/debug" 7 "strings" 8) 9 10type Inner struct { 11 Err int 12} 13 14func (i *Inner) NotExpectedInStackTrace() int { 15 if i == nil { 16 return 86 17 } 18 return 17 + i.Err 19} 20 21type Outer struct { 22 Inner 23} 24 25func ExpectedInStackTrace() { 26 var o *Outer 27 println(o.NotExpectedInStackTrace()) 28} 29 30func main() { 31 defer func() { 32 if r := recover(); r != nil { 33 stacktrace := string(debug.Stack()) 34 if strings.Contains(stacktrace, "NotExpectedInStackTrace") { 35 fmt.Println("FAIL, stacktrace contains NotExpectedInStackTrace") 36 } 37 if !strings.Contains(stacktrace, "ExpectedInStackTrace") { 38 fmt.Println("FAIL, stacktrace does not contain ExpectedInStackTrace") 39 } 40 } else { 41 fmt.Println("FAIL, should have panicked but did not") 42 } 43 }() 44 ExpectedInStackTrace() 45} 46