Skip to content

Go-dyno

Quick start

Install latest version of the library using go get command:

Bash
go get -u github.com/ovechkin-dm/go-dyno

Example

This is an example of proxy that prints method name before any method invocation of the original instance.

Go
package main

import (
    "fmt"
    "reflect"

    "github.com/ovechkin-dm/go-dyno/pkg/dyno"
)

type Greeter interface {
    Greet() string
    SayHello(name string) string
}

type SimpleGreeter struct {

}

func (g *SimpleGreeter) Greet() string {
    return "Hello!"
}

func (g *SimpleGreeter) SayHello(name string) string {
    return fmt.Sprintf("Hello, %s!", name)
}

type ProxyHandler[T any] struct {
    Impl T
}

func (p *ProxyHandler[T]) Handle(m reflect.Method, values []reflect.Value) []reflect.Value {
    fmt.Println("Method called:", m.Name)
    return reflect.ValueOf(p.Impl).MethodByName(m.Name).Call(values)    
}



func main() {   
    greeter := &SimpleGreeter{}
    proxyHandler := &ProxyHandler[Greeter]{Impl: greeter}
    dynamicGreeter, err := dyno.Dynamic[Greeter](proxyHandler.Handle)
    if err != nil {
        fmt.Println("Error creating dynamic greeter:", err)
        return
    }

    fmt.Println(dynamicGreeter.Greet())
    fmt.Println(dynamicGreeter.SayHello("World"))
}