Registrieren von Paketen in Go ohne zyklische Abhängigkeit

Ich habe ein zentrales Paket, das mehrere Schnittstellen bietet, von denen andere Pakete abhängig sind (nennen wir einesClient). Diese anderen Pakete bieten mehrere Implementierungen dieser ersten Schnittstellen UDPClient, TCPClient). Ich instanziiere einClient durch Aufrufen vonNewClient im zentralen Paket und wählt die entsprechende Client-Implementierung aus einem der abhängigen Pakete aus und ruft sie auf.

Dies fällt auseinander, wenn ich dem zentralen Paket diese anderen Pakete mitteilen möchte, damit es weiß, welche Clients es erstellen kann. Diese abhängigen Client-Implementierungen importieren auch das Zentralpaket und erstellen eine zyklische Abhängigkeit, die Go nicht zulässt.

Was ist der beste Weg nach vorne? Ich würde es vorziehen, nicht alle diese Implementierungen in einem einzigen Paket zusammenzufassen, und die Erstellung eines separaten Registrierungspakets scheint zu viel zu sein. Momentan muss sich jede Implementierung beim zentralen Paket registrieren, dies setzt jedoch voraus, dass der Benutzer jede Implementierung in jede separate Binärdatei importieren kann, die den Client verwendet.

import (
    _ udpclient
    _ tcpclient
    client
)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage