panic()が返すのは空interfaceなので、panic(string)したらrecover()で取り出せるのはstringになる。
ググってみても、panic(string)してる例は結構たくさんあった。
package main import ( "fmt" "reflect" ) func main() { f() } func f() { defer func() { if err := recover(); err != nil { fmt.Println("type of err ", reflect.TypeOf(err)) a, b := err.(error) fmt.Println(a) // nil fmt.Println(b) // false } }() panic("aaa") // panic(errors.New("aaa")) }
実行結果 play.golang.org