// run // Copyright 2016 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. // Test that an interface conversion error panics with an "interface // conversion" run-time error. It was (incorrectly) panicking with a // "nil pointer dereference." package main import ( "fmt" "runtime" "strings" ) type I interface { Get() int } func main() { defer func() { r := recover() if r == nil { panic("expected panic") } re, ok := r.(runtime.Error) if !ok { panic(fmt.Sprintf("got %T, expected runtime.Error", r)) } if !strings.Contains(re.Error(), "interface conversion") { panic(fmt.Sprintf("got %q, expected interface conversion error", re.Error())) } }() e := (interface{})(0) if _, ok := e.(I); ok { panic("unexpected interface conversion success") } fmt.Println(e.(I)) panic("unexpected interface conversion success") }