用反射生成Go方法集

Is it possible to generate an interface or method set of a struct at runtime with reflection?

For example:

type S struct {
    a int
}

func (s *S) Fn(b int) int {
    return s.a + b
}

type I interface {
    Fn(a int) int
}

func main() {
    var x I = &S{a: 5}
    fmt.Printf("%#v
", x.Fn)
    fmt.Printf("%#v
", reflect.TypeOf(x).Method(0))

    var y I
    y.Fn = x.Fn // This fails, but I want to set y.Fn at runtime.
    fmt.Printf("%#v
", reflect.TypeOf(y).Method(0))
}

https://play.golang.org/p/agH2fQ4tZ_

To clarify, I'm trying to build a middleware library so interface I contains the http handlers and I want to wrap each hander with some sort of req/response logging so I need to return a new interface I where each function in new Interface I wraps the original + some logging.

Here's how to handle this for interfaces I and J.

type I interface { Fn1(a int) int }
type J interface { Fn2(a int) int }

type Y struct {       // Y implements I by calling fn
   fn func(a int) int
}

func (y Y) Fn1(a int) int { return y.fn(a) }

type Z struct {       // Z implements J by calling fn
   fn func(a int) int
}

func (z Z) Fn2(a int) int { return y.fn(a) }

var y I = Y{fn: x.Fn}
var z J = Z{fn: x.Fn}

There's no need to use reflection.

playground example