Maison > Article > développement back-end > Parcourez la carte de "interface{}" et appelez la même méthode sur chaque élément de Golang
Je développe un jeu de console simple pour apprendre le go et je suis resté bloqué sur un problème apparemment simple qui ne pose pas de problème dans d'autres langues mais qui semble presque impossible en go.
J'ai une interface mappée sous forme de champ dans une structure comme celle-ci :
type room struct { // ... components map[string]interface{} // ... }
Je dois parcourir la carte et appeler la méthode render()
方法(假设它们都实现 render()
pour chaque élément stocké dans la carte. Par exemple en js ou en php, cela ne poserait pas de problème, mais en go, je me cogne la tête contre le mur toute la journée.
J'ai besoin de quelque chose comme ça :
for _, v := range currentroom.components { v.render() }
Cela n'a pas fonctionné, mais lorsque j'ai spécifié le type et appelé manuellement chaque élément individuellement, cela a fonctionné :
currentRoom.Components["menu"].(*List.List).Render() currentRoom.Components["header"].(*Header.Header).Render()
Comment appeler la méthode render()
sur chaque élément de la carte ? Ou s'il existe une manière meilleure/différente de résoudre ce problème, veuillez m'éclairer car je suis à bout de nerfs ici.
Définir l'interface :
type renderable interface { render() }
Vous pouvez ensuite taper assert map elements et appeler render tant qu'ils implémentent cette méthode :
currentroot.components["menu"].(renderable).render()
Pour tester si quelque chose est rendu, utilisez :
renderable, ok:=currentRoot.Components["menu"].(Renderable) if ok { renderable.Render() }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!