|  | // 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() | 
|  | } |