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// The linker can prune methods that are not directly called or 8// assigned to interfaces, but only if reflect.Type.MethodByName is 9// never used. Test it here. 10 11package main 12 13import reflect1 "reflect" 14 15var called = false 16 17type M int 18 19func (m M) UniqueMethodName() { 20 called = true 21} 22 23var v M 24 25type MyType interface { 26 MethodByName(string) (reflect1.Method, bool) 27} 28 29func main() { 30 var t MyType = reflect1.TypeOf(v) 31 m, _ := t.MethodByName("UniqueMethodName") 32 m.Func.Interface().(func(M))(v) 33 if !called { 34 panic("UniqueMethodName not called") 35 } 36} 37