¿Es Go bueno para estructuras de datos y algoritmos?
Sí. Compila a código nativo rápido, su sintaxis es tan reducida que casi todo lo que lees es el algoritmo, y los genéricos (desde Go 1.18) hacen reutilizable una pila o un heap tipados. La contrapartida es una biblioteca estándar austera: más allá de slices, mapas, container/list y container/heap, las estructuras las escribes tú, que en una ruta de aprendizaje es precisamente la idea. Go también está detrás de buena parte de la infraestructura cloud actual, incluidos Docker y Kubernetes, lo que lo convierte en un lenguaje natural para las entrevistas de puestos de backend.
¿Qué tipos y paquetes de Go corresponden a qué estructuras de datos?
Un slice es un array dinámico y, con append y volviendo a recortarlo, también es tu pila; un mapa es una tabla hash, y map[T]struct{} es el conjunto idiomático; container/list es una lista doblemente enlazada; y container/heap gestiona un heap binario sobre cualquier tipo que implemente heap.Interface. No hay tipo cola, árbol, trie ni grafo, así que esos los construyes tú, en los pasos uno y dos.
¿Cómo funciona container/heap en Go?
Implementas heap.Interface sobre un tipo slice propio: Len, Less y Swap de sort.Interface, más Push y Pop, que solo añaden y quitan elementos al final del slice. Después llamas a las funciones del paquete heap.Push y heap.Pop, nunca a tus propios métodos, y son ellas las que suben y bajan los elementos para mantener el orden. Se lee raro hasta que has escrito un heap tú mismo, algo que el paso dos te pide hacer.
¿Por qué recorrer un mapa de Go da un orden distinto cada vez?
Porque Go aleatoriza a propósito el orden de iteración de los mapas, para que ningún programa acabe dependiendo de él. Una tabla hash no tiene un orden con sentido en ningún lenguaje; Go solo se asegura de que lo notes. Cuando el orden importa, como en la salida que se compara en una prueba, reúne las claves en un slice y ordénalo, o mantén un slice junto al mapa.
¿Qué cursos de esta ruta no se enseñan en Go?
Tres: la programación dinámica y la serie de entrevistas en Python, que se enseñan en Python, y la manipulación de bits, que se enseña en C++. Aparecen después de los pasos, cada uno con un enlace que lo abre en su propio lenguaje. Una tabla de memoización en Go es un slice o un mapa, y Go añade un operador de bits que C++ no tiene: &^, AND NOT, que pone a cero en el operando izquierdo cada bit que esté a uno en el derecho.
¿Necesito saber Go antes de empezar esta ruta?
Como mínimo, structs, punteros, slices, mapas y métodos; los genéricos ayudan, y puedes aprenderlos por el camino. Si son nuevos para ti, el curso de Go de Coddy te lleva hasta ahí primero, gratis, y esta ruta continúa donde él termina.