Goでpanic(string) すると recover()で取り出せるのがstringになる

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