mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 00:30:57 +00:00 
			
		
		
		
	
		
			
	
	
		
			79 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // 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. | ||
|  | 
 | ||
|  | package main | ||
|  | 
 | ||
|  | import "./embed0" | ||
|  | 
 | ||
|  | type X1 struct{} | ||
|  | 
 | ||
|  | func (X1) Foo() {} | ||
|  | 
 | ||
|  | type X2 struct{} | ||
|  | 
 | ||
|  | func (X2) foo() {} | ||
|  | 
 | ||
|  | type X3 struct{} | ||
|  | 
 | ||
|  | func (X3) foo(int) {} | ||
|  | 
 | ||
|  | type X4 struct{ p.M1 } | ||
|  | 
 | ||
|  | type X5 struct{ p.M1 } | ||
|  | 
 | ||
|  | func (X5) foo(int) {} | ||
|  | 
 | ||
|  | type X6 struct{ p.M2 } | ||
|  | 
 | ||
|  | type X7 struct{ p.M2 } | ||
|  | 
 | ||
|  | func (X7) foo() {} | ||
|  | 
 | ||
|  | type X8 struct{ p.M2 } | ||
|  | 
 | ||
|  | func (X8) foo(int) {} | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	var i1 interface{} = X1{} | ||
|  | 	check(func() { _ = i1.(p.I1) }, "interface conversion: main.X1 is not p.I1: missing method Foo") | ||
|  | 
 | ||
|  | 	var i2 interface{} = X2{} | ||
|  | 	check(func() { _ = i2.(p.I2) }, "interface conversion: main.X2 is not p.I2: missing method foo") | ||
|  | 
 | ||
|  | 	var i3 interface{} = X3{} | ||
|  | 	check(func() { _ = i3.(p.I2) }, "interface conversion: main.X3 is not p.I2: missing method foo") | ||
|  | 
 | ||
|  | 	var i4 interface{} = X4{} | ||
|  | 	check(func() { _ = i4.(p.I2) }, "interface conversion: main.X4 is not p.I2: missing method foo") | ||
|  | 
 | ||
|  | 	var i5 interface{} = X5{} | ||
|  | 	check(func() { _ = i5.(p.I2) }, "interface conversion: main.X5 is not p.I2: missing method foo") | ||
|  | 
 | ||
|  | 	var i6 interface{} = X6{} | ||
|  | 	check(func() { _ = i6.(p.I2) }, "") | ||
|  | 
 | ||
|  | 	var i7 interface{} = X7{} | ||
|  | 	check(func() { _ = i7.(p.I2) }, "") | ||
|  | 
 | ||
|  | 	var i8 interface{} = X8{} | ||
|  | 	check(func() { _ = i8.(p.I2) }, "") | ||
|  | } | ||
|  | 
 | ||
|  | func check(f func(), msg string) { | ||
|  | 	defer func() { | ||
|  | 		v := recover() | ||
|  | 		if v == nil { | ||
|  | 			if msg == "" { | ||
|  | 				return | ||
|  | 			} | ||
|  | 			panic("did not panic") | ||
|  | 		} | ||
|  | 		got := v.(error).Error() | ||
|  | 		if msg != got { | ||
|  | 			panic("want '" + msg + "', got '" + got + "'") | ||
|  | 		} | ||
|  | 	}() | ||
|  | 	f() | ||
|  | } |