Registrar paquetes en Go sin dependencia cíclica

Tengo un paquete central que proporciona varias interfaces de las que dependen otros paquetes (llamemos a unoClient) Esos otros paquetes proporcionan varias implementaciones de esas primeras interfaces (UDPClient, TCPClient) Yo instancia unaClient llamandoNewClient en el paquete central, y selecciona e invoca la implementación de cliente apropiada de uno de los paquetes dependientes.

Esto se desmorona cuando quiero contarle al paquete central sobre esos otros paquetes, para que sepa qué clientes puede crear. Esas implementaciones de clientes dependientes también importan el paquete central, creando una dependencia cíclica que Go no permite.

¿Cuál es el mejor camino a seguir? Prefiero no mezclar todas esas implementaciones en un solo paquete, y crear un paquete de registro separado parece excesivo. Actualmente tengo cada implementación registrada en el paquete central, pero esto requiere que el usuario sepa importar cada implementación en cada binario separado que hace uso del cliente.

import (
    _ udpclient
    _ tcpclient
    client
)

Respuestas a la pregunta(2)

Su respuesta a la pregunta