Símbolo de complemento como retorno de función

Me encuentro con un comportamiento Go que no entiendo. Mi idea es importar un complemento que implemente una interfaz que esté fuera de ambos paquetes. Si se devuelve una estructura, funciona bien, pero para asegurarme de que implementa la interfaz, quiero devolver una interfaz que falla.

Definición de interfaz:

package iface

type IPlugin interface{
   SayHello(string)
   SayGoodby(string)
   WhatsYourName() string
}

El programa principal se ve así:

package main

import (
    "plugin"
    "plugin_test/iface"
    "errors"
    "fmt"
)

//go:generate go build -buildmode=plugin -o ./pg/test.so ./pg/test.go

func main(){
    path := "pg/test.so"
    plug, err := plugin.Open(path)
    if err != nil {
        panic(err)
    }

    sym, err := plug.Lookup("Greeter")
    if err != nil {
        panic(err)
    }

    var pg iface.IPlugin
    pg, ok := sym.(iface.IPlugin)
    if !ok {
        panic(errors.New("error binding plugin to interface"))
    }

    fmt.Printf("You're now connected to: %s \n", pg.WhatsYourName())
    pg.SayHello("user")
    pg.SayGoodby("user")
}

El complemento (almacenado en pg / test.go)

package main

import (
    "fmt"
    "plugin_test/iface"
)

type testpl struct {}

func(pl testpl) SayHello(s string){
    fmt.Printf("Plugin says hello to %s \n", s)
}
func(pl testpl) SayGoodby(s string){
    fmt.Printf("Plugin says goodby to %s \n", s)
}
func(pl testpl) WhatsYourName() string{
    return "my name is Test-Plugin"
}

/* This function works */
func getPlugin() testpl{
    return testpl{}
}

/* This function doesn't work */
func getPlugin() iface.IPlugin{
    return testpl{}
}

/* This function also doesn't work */
func getPlugin() interface{}{
    return testpl{}
}

var Greeter = getPlugin()

Probé cadagetPlugin funcionar por sí solo.

La función regresatestpl imprime el resultado esperado:

You're now connected to: my name is Test-Plugin
Plugin says hello to user
Plugin says goodby to user 

Las otras funciones terminan ensym.(iface.IPlugin)

panic: error binding plugin to interface

goroutine 1 [running]:
main.main()
        /home/../../../main.go:27 +0x343
exit status 2

¿Alguien puede explicar por qué esto no es posible? ¿No sería más fácil crear un complemento si no le permitiera construir su complemento en tal caso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta