mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	
		
			
	
	
		
			37 lines
		
	
	
	
		
			719 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
	
		
			719 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // 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. | ||
|  | 
 | ||
|  | // The linker can prune methods that are not directly called or | ||
|  | // assigned to interfaces, but only if reflect.Type.MethodByName is | ||
|  | // never used. Test it here. | ||
|  | 
 | ||
|  | package main | ||
|  | 
 | ||
|  | import reflect1 "reflect" | ||
|  | 
 | ||
|  | var called = false | ||
|  | 
 | ||
|  | type M int | ||
|  | 
 | ||
|  | func (m M) UniqueMethodName() { | ||
|  | 	called = true | ||
|  | } | ||
|  | 
 | ||
|  | var v M | ||
|  | 
 | ||
|  | type MyType interface { | ||
|  | 	MethodByName(string) (reflect1.Method, bool) | ||
|  | } | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	var t MyType = reflect1.TypeOf(v) | ||
|  | 	m, _ := t.MethodByName("UniqueMethodName") | ||
|  | 	m.Func.Interface().(func(M))(v) | ||
|  | 	if !called { | ||
|  | 		panic("UniqueMethodName not called") | ||
|  | 	} | ||
|  | } |