Ich versuche, eine Allzweck-Wrapper für Abonnements zu schreiben, so etwas wie:Golang: Kann ich zu gieße chan Schnittstelle {}
type Subscriber interface{
Subscribe(addr string) chan interface{}
}
Angenommen, es gibt eine Bibliothek, die ich verwenden möchte, die eine Methode subscribe hat in es, aber die eine chan library.Object
verwendet. Ich möchte in der Lage sein, etwas zu tun wie:
Derzeit glaube ich nicht, dass eine solche Besetzung möglich ist. Und ich möchte die zugrunde liegende Bibliothek nicht ändern, da der Wrapper von Bibliotheksimplementierungen unabhängig sein sollte.
Ich habe Is there a way to cast Structs for sending over a channel gesehen, aber in diesem Fall kann die Anwendung geändert werden, um den Bedarf zu erfüllen. Hier kann es nicht. Ist das möglich? Gibt es einen besseren Weg? Eine Lösung besteht darin, in einem Allzweckkanal in Subscribe zu gehen und unablässig auf chan library.Object
zu warten und alles abzufeuern, das auf meinem allgemeinen Kanal ankommt, aber ich habe nicht besonders gerne einen anderen Kanal einführen müssen, nur um herumzukommen der Typ gegossen.
Go kein Konzept von "cast" hat. Machen Sie Konvertierungen, geben Sie Assertions und Interfaces ein (und geben Sie Switches ein) und das war's. Typkonvertierungen kommen am nächsten in z. C. Talking über Casts und Cast funktioniert nicht, wird nur Ihre Sicht auf das Problem verwischen, die durch die Verwendung von Typ-Konvertierungen (funktioniert nicht in Ihrer Situation!), Geschickte Verwendung von Schnittstellen und geeignete Typ Assertions/Switches möglicherweise mit kombiniert werden kann Betrachtung. Die meisten "General Purpose" Zeug in Go ist zum Scheitern verurteilt oder wird langsam durch Knietiefe waten in Reflexion. – Volker