1// Copyright 2023 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// Like ifacemethod2.go, this tests that a method *is* live 6// if the type is "indirectly" converted to an interface 7// using reflection with a method descriptor as intermediate. 8// However, it uses MethodByName() with a constant name of 9// a method to look up. This does not disable the DCE like 10// Method(0) does. 11 12package main 13 14import "reflect" 15 16type S int 17 18func (s S) M() { println("S.M") } 19 20type I interface{ M() } 21 22type T float64 23 24func (t T) F(s S) {} 25 26func main() { 27 var t T 28 meth, _ := reflect.TypeOf(t).MethodByName("F") 29 ft := meth.Type 30 at := ft.In(1) 31 v := reflect.New(at).Elem() 32 v.Interface().(I).M() 33} 34