Efficacité de io.Reader en Go : une bataille avec l'indirection et les assertions de type
De nombreuses fonctions en Go utilisent io.Reader comme entrée, permettant la diffusion en continu et évitant de charger tout en mémoire. Cependant, lorsque vous avez déjà les octets, les utiliser directement est plus efficace. Cet article décrit l'expérience de l'auteur en décodant des images avec libavif et libheif. Par souci de simplicité, les interfaces mémoire simples ont été utilisées, mais la fonction image.Decode de Go vérifie s'il existe une fonction Peek sur io.Reader, l'enveloppant avec bufio.Reader si elle n'est pas trouvée, ce qui empêche l'utilisation directe de bytes.Reader. L'auteur utilise des assertions de type et unsafe.Pointer pour contourner bufio.Reader et bytes.Reader, réalisant une copie nulle. Cependant, l'article souligne des problèmes dans la vérification de type et la conception d'interface de Go, y compris les « API shadow » qui en résultent.