Ich spiele mit Golang und ich möchte wissen, ob es einen Weg gibt, der alle Methoden oder Eigenschaften auflisten kann, die ich für eine Variable verwenden kann. In Ruby kann ich einfach some_variable.methods
verwenden, um alle Methoden zu erhalten, die auf some_variable
definiert sind. Gibt es in Golang eine ähnliche Sache?Wie lautet das Golang-Äquivalent zu Rubys Methode?
Antwort
Ja, Sie können. Mit Reflection kann jedes Objekt reflect.Type
alle Methoden auflisten, die der tatsächliche Typ darstellt. aber es ist nicht eine sehr häufige oder idiomatische Sache zu gehen:
import (
"fmt"
"reflect"
)
type Foo struct {
}
func (f Foo) Bar() {
}
func (f Foo) Baz() {
}
func main() {
t := reflect.TypeOf(Foo{})
for i := 0; i < t.NumMethod(); i++ {
fmt.Println(t.Method(i).Name)
}
}
// Output:
// Bar
// Baz
Dies kann auch auf reflect.Value
erfolgen, je nachdem, was Sie brauchen.
Aber die eigentliche Frage ist - was wollen Sie hier erreichen? Versuchen Sie zu überprüfen, ob ein Typ eine Schnittstelle oder etwas Ähnliches implementiert? Es gibt wahrscheinlich eine einfachere Lösung für Ihr Ziel. Was ist dein eigentliches Ziel?
Danke. Ich möchte nur schnell alle Methoden oder Eigenschaften ansehen, die ich für eine Variable verwenden kann, während ich gerade Golang lerne. – user130268
@ user130268 Die Dokumentation der Standardbibliothek ist eine bessere Lösung IMHO :) –
Wenn Sie nur in der Entwicklungsphase guru Entwicklungswerkzeug benötigen, kann Ihnen das sehr helfen.
- 1. Wie lautet der JavaScript-Code von Rubys Enumerable # -Zyklus?
- 2. Rubys 'next' Methode Experiment
- 3. Wie lautet die LINQ'sche Methode?
- 4. Rubys Redo-Methode vs While-Schleife
- 5. OpenSSL :: SSL :: SSLError mit Rubys offener Methode
- 6. Was ist das Gegenteil von Rubys Include?
- 7. Wie lautet das Feld "Systemsequenz" in Visio?
- 8. Wie lautet das Datumsformat für diese Zeichenfolge?
- 9. Wie lautet das Schlüsselwort "const" in Dart?
- 10. Wie lautet das Parameterformat für geometry.location?
- 11. Wie lautet das internationale Format für Telefonnummern?
- 12. Wie lautet das Komma in diesem Codebeispiel?
- 13. Wie lautet das Schlüsselwort "checked" für C#?
- 14. Wie lautet das Ausgabeformat des Befehls hedddump?
- 15. Wie lautet das Format der Logstash-Konfigurationsdatei?
- 16. Wie lautet das IIS-Äquivalent dieser Umschreibungsregeln?
- 17. Oracle: Wie lautet das Verbindungszeichenfolgenformat "instantclient"?
- 18. Gegenüber von Rubys number_to_human
- 19. Wie funktioniert die Schließung für Rubys define_singleton_method?
- 20. Wo sucht Rubys have_header-Methode nach Header-Dateien?
- 21. Wie lautet das HTML-Tag für das Währungssymbol "Chinesischer Dollar"?
- 22. Rubys Sendemethode mit Blockvariable Interpolation
- 23. Wie lautet die Namenskonvention für die Factory-Methode?
- 24. Scala entspricht Rubys map.each?
- 25. Schnellere/effizientere Alternativen zu Rubys Marshal?
- 26. Wie lautet die jQuery-Methode zum Schreiben dieses JavaScript?
- 27. Gibt es ein Clojure-Äquivalent von Rubys #tap-Methode
- 28. Wie lautet die Python-Methode zum rekursiven Festlegen von Dateiberechtigungen?
- 29. Wie lautet die richtige Methode zum Aufrufen von [super layoutSubviews]?
- 30. Wie lautet das Standardverhalten für einen out-Parameter, wenn eine TryXxxx-Methode false zurückgibt?
Nun, Sie haben die Frage mit "Reflexion" markiert, so dass Sie zu wissen scheinen, wo Sie suchen sollten: 'Paket reflektieren'. Vor allem https://golang.org/pkg/reflect/#Value.Method. – Volker