// run package main import ( "fmt" "reflect" "strings" ) // Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. func main() { defer func() { e := recover() if e == nil { panic("should have panicked") } text := fmt.Sprintf("%s", e) // handles both string and runtime.errorString if !strings.HasPrefix(text, "reflect:") { panic("wanted a reflect error, got this instead:\n" + text) } }() r := reflect.MakeFunc(reflect.TypeOf(func() error { return nil }), func(args []reflect.Value) []reflect.Value { var x [1]reflect.Value return x[:] }).Interface().(func() error) r() }