In objektorientierten Sprachen verwende ich Klassenvariablen, um nachzuvollziehen, wie viele Instanzen derzeit generiert werden, indem bei der Konstruktion inkrementiert und bei der Zerstörung dekrementiert wird.
Ich versuche, ähnliches Verhalten in go zu implementieren:
%Vor%und das funktioniert auf halbem Wege, da ich den Zähler nicht über einen Destruktor dekrementieren kann.
Kann ich die Zerstörung von Objekten irgendwie nachahmen? Wie würde ich die Anzahl der Instanzen korrekt verfolgen?
Sie können runtime.SetFinalizer so verwenden. Siehe hier für die Version für den Spielplatz.
%Vor%Dies druckt
%Vor%Beachten Sie dies in der Dokumentation für Fehler mit Finalizern
Der Finalizer für x wird zu einem beliebigen Zeitpunkt nach x ausgeführt wird unerreichbar. Es gibt keine Garantie, dass Finalizer ausgeführt werden bevor ein Programm beendet wird, sind sie normalerweise nur für Freigeben von Nicht-Speicher-Ressourcen, die mit einem Objekt assoziiert sind, während eines lang laufendes Programm.
Es gab eine Diskussion über Golan-Nüsse über Finalizer.
Für jetzt
Sie müssen also Ihre Instanzzählung selbst verwalten.
Normalerweise haben Sie keine Instanzen, die von sich selbst leben. Für viele praktische Anwendungen (ohne das Profiling eines komplexen und schwer verständlichen Programms) können Sie defer
verwenden, um das Ende der Lebensdauer Ihrer Variablen zu verfolgen . Ich werde nicht so tun, als ob Finalizer wirklich ersetzt, aber es ist einfach und oft ausreichend.
Tags und Links go instance destructor