1// run 2 3// Copyright 2016 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Test that an interface conversion error panics with an "interface 8// conversion" run-time error. It was (incorrectly) panicking with a 9// "nil pointer dereference." 10 11package main 12 13import ( 14 "fmt" 15 "runtime" 16 "strings" 17) 18 19type I interface { 20 Get() int 21} 22 23func main() { 24 defer func() { 25 r := recover() 26 if r == nil { 27 panic("expected panic") 28 } 29 re, ok := r.(runtime.Error) 30 if !ok { 31 panic(fmt.Sprintf("got %T, expected runtime.Error", r)) 32 } 33 if !strings.Contains(re.Error(), "interface conversion") { 34 panic(fmt.Sprintf("got %q, expected interface conversion error", re.Error())) 35 } 36 }() 37 e := (interface{})(0) 38 if _, ok := e.(I); ok { 39 panic("unexpected interface conversion success") 40 } 41 fmt.Println(e.(I)) 42 panic("unexpected interface conversion success") 43} 44