1// run 2 3package main 4 5import ( 6 "fmt" 7 "reflect" 8 "strings" 9) 10 11// Copyright 2019 The Go Authors. All rights reserved. 12// Use of this source code is governed by a BSD-style 13// license that can be found in the LICENSE file. 14 15func main() { 16 defer func() { 17 e := recover() 18 if e == nil { 19 panic("should have panicked") 20 } 21 text := fmt.Sprintf("%s", e) // handles both string and runtime.errorString 22 if !strings.HasPrefix(text, "reflect:") { 23 panic("wanted a reflect error, got this instead:\n" + text) 24 } 25 }() 26 r := reflect.MakeFunc(reflect.TypeOf(func() error { return nil }), 27 func(args []reflect.Value) []reflect.Value { 28 var x [1]reflect.Value 29 return x[:] 30 }).Interface().(func() error) 31 r() 32} 33