Je suis encore assez nouveau pour Go et j'ai été surpris de ne pas pouvoir utiliser le sous-type d'une interface intégrée. Voici un petit exemple pour expliquer ce que je veux dire:Embedded Interface
func test(sl bufio.ReadWriter){
// cannot use sl(type bufio.ReadWriter) as type bufio.Reader in function argument
readStuff(sl)
[...]
writeStuff(sl) // same kind of error
}
func readStuff(sl bufio.Reader){
[...]
}
Comme chaque interface ont la même mise en page de mémoire et ReadWriter est un lecteur et un écrivain, je me attendais à ce code fonctionne. J'ai essayé de convertir le type d'interface avec:
readStuff(sl.(buffio.Reader))
Mais cela ne fonctionne pas non plus. J'ai donc deux questions:
- Pourquoi ça ne marche pas?
- Quelle est la philosophie de départ concernant ce problème?
Merci! Cela fonctionne avec readStuff (* sl.Reader) – user1612346
J'aurais une deuxième question: et si tous mes paramètres sont des tranches au lieu d'un seul paramètre. Y at-il un moyen élégant de convertir une tranche de ReadWriter à une tranche de Reader? – user1612346
Je pense que la solution la plus élégante que vous trouverez est de créer une nouvelle tranche et de la peupler via une boucle for. – Daniel