El paquete slices de la biblioteca estándar de Go incluye la función Backward, que recorre los elementos de un slice en orden inverso entregando pares (índice, valor). Su firma genérica, func BackwardSlice ~[]E, E any iter.Seq2[int, E], puede parecer innecesariamente compleja, pero es el resultado de varias decisiones acumuladas. Este artículo didáctico reconstruye paso a paso el razonamiento que lleva hasta esa firma. Primero se parte de una implementación trivial que devuelve un nuevo slice en orden inverso: es simple, pero hace una copia O(n) del original. Para evitarla, se evoluciona hacia una closure que entrega el siguiente elemento en cada llamada, con coste de memoria O(1). El siguiente paso introduce una función iteradora basada en callbacks con un parámetro yield que devuelve un bool para permitir la salida anticipada; aquí aparece el tipo Seq[T]. Como el recorrido convencional de un slice aporta tanto el índice como el valor, se amplia la firma para entregar pares (int, T) y se define Seq2[K, V]. Por último, se aborda el caso de los slices definidos por el usuario, cuyo tipo subyacente es un slice pero no son idénticos a este: para que Backward acepte tanto []int como IDs (definido como []int) se introduce la restricción ~[]E, que representa todos los tipos cuyo tipo subyacente es un slice. El resultado es una firma compacta, genérica, sin copia intermedia y compatible con el resto del paquete slices. El texto sirve como guía para entender iteradores en Go y por qué el lenguaje eligió este diseño.
