Durchlaufen Sie die Karte von „interface{}' und rufen Sie für jedes Element in Golang dieselbe Methode auf

王林
Freigeben: 2024-02-05 11:57:54
nach vorne
612 Leute haben es durchsucht

迭代“interface{}”的映射并在 Golang 中的每个项目上调用相同的方法

Frageninhalt

Ich entwickle ein einfaches Konsolenspiel zum Erlernen von Go und bin bei einem scheinbar einfachen Problem hängen geblieben, das in anderen Sprachen kein Problem darstellt, in Go jedoch fast unmöglich erscheint.

Ich habe eine Schnittstelle als Feld in einer Struktur wie dieser zugeordnet:

type room struct {
    // ...
    components map[string]interface{}
    // ...
}
Nach dem Login kopieren

Ich muss die Karte durchlaufen und die render() 方法(假设它们都实现 render()-Methode für jedes in der Karte gespeicherte Element aufrufen. Zum Beispiel wäre das in js oder php kein Problem, aber in go stoße ich den ganzen Tag mit dem Kopf gegen die Wand.

Ich brauche so etwas:

for _, v := range currentroom.components {
    v.render()
}
Nach dem Login kopieren

Das hat nicht funktioniert, aber als ich den Typ angegeben und jedes Element manuell einzeln aufgerufen habe, hat es funktioniert:

currentRoom.Components["menu"].(*List.List).Render()
currentRoom.Components["header"].(*Header.Header).Render()
Nach dem Login kopieren

Wie rufe ich die render()-Methode für jedes Element in der Karte auf? Oder wenn es einen besseren/anderen Weg gibt, dieses Problem zu lösen, klären Sie mich bitte auf, da ich hier mit meiner Weisheit am Ende bin.


Richtige Antwort


Schnittstelle definieren:

type renderable interface {
   render()
}
Nach dem Login kopieren

Sie können dann Assert Map Elements eingeben und Render aufrufen, sofern diese Methode implementiert ist:

currentroot.components["menu"].(renderable).render()
Nach dem Login kopieren

Um zu testen, ob etwas darstellbar ist, verwenden Sie:

renderable, ok:=currentRoot.Components["menu"].(Renderable)
if ok {
   renderable.Render()
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDurchlaufen Sie die Karte von „interface{}' und rufen Sie für jedes Element in Golang dieselbe Methode auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage