// run package main import ( "fmt" "runtime/debug" "strings" ) type Inner struct { Err int } func (i *Inner) NotExpectedInStackTrace() int { if i == nil { return 86 } return 17 + i.Err } type Outer struct { Inner } func ExpectedInStackTrace() { var o *Outer println(o.NotExpectedInStackTrace()) } func main() { defer func() { if r := recover(); r != nil { stacktrace := string(debug.Stack()) if strings.Contains(stacktrace, "NotExpectedInStackTrace") { fmt.Println("FAIL, stacktrace contains NotExpectedInStackTrace") } if !strings.Contains(stacktrace, "ExpectedInStackTrace") { fmt.Println("FAIL, stacktrace does not contain ExpectedInStackTrace") } } else { fmt.Println("FAIL, should have panicked but did not") } }() ExpectedInStackTrace() }