Go va bene per algoritmi e strutture dati?
Sì. Compila in codice nativo veloce, la sua sintassi è così ridotta che l'algoritmo è quasi tutto ciò che leggi, e i generics (da Go 1.18) rendono riutilizzabile una pila o un heap tipizzati. Il compromesso è una libreria standard essenziale: oltre a slice, mappe, container/list e container/heap, le strutture le scrivi tu, che in un percorso di apprendimento è proprio lo scopo. Go fa anche girare buona parte dell'infrastruttura cloud di oggi, Docker e Kubernetes compresi, il che lo rende un linguaggio naturale per i colloqui backend.
Quali tipi e pacchetti di Go corrispondono a quali strutture dati?
Uno slice è un array dinamico, e con append e il reslicing è anche la tua pila; una mappa è una tabella hash, e map[T]struct{} è l'insieme idiomatico; container/list è una lista doppiamente concatenata; e container/heap gestisce un heap binario su qualsiasi tipo che implementi heap.Interface. Non esistono tipi coda, albero, trie o grafo, quindi quelli li costruisci tu, nel primo e nel secondo passaggio.
Come funziona container/heap in Go?
Implementi heap.Interface su un tuo tipo slice: Len, Less e Swap da sort.Interface, più Push e Pop, che si limitano ad aggiungere e rimuovere dalla fine dello slice. Poi chiami le funzioni del pacchetto heap.Push e heap.Pop, mai i tuoi metodi, e sono loro a spostare gli elementi su e giù per mantenere l'ordine. Sembra strano finché non hai scritto un heap da te, ed è quello che fai nel secondo passaggio.
Perché scorrere una mappa in Go dà un ordine diverso ogni volta?
Perché Go rende casuale apposta l'ordine di iterazione delle mappe, così che nessun programma finisca per dipenderne. Una tabella hash non ha un ordine significativo in nessun linguaggio; Go si assicura solo che tu te ne accorga. Quando l'ordine conta, come in un output confrontato da un test, raccogli le chiavi in uno slice e ordinalo, oppure tieni uno slice accanto alla mappa.
Quali corsi di questo percorso non sono insegnati in Go?
Tre: la programmazione dinamica e la serie di colloqui in Python, insegnate in Python, e la manipolazione dei bit, insegnata in C++. Sono elencati dopo i passaggi, ognuno con un link che lo apre nel suo linguaggio. Una tabella di memoizzazione in Go è uno slice o una mappa, e Go aggiunge un operatore sui bit che il C++ non ha: &^, AND NOT, che azzera nell'operando sinistro ogni bit impostato in quello destro.
Devo conoscere Go prima di iniziare questo percorso?
Almeno struct, puntatori, slice, mappe e metodi; i generics aiutano, e puoi impararli strada facendo. Se sono argomenti nuovi, il corso di Go di Coddy ti porta prima a quel punto, gratis, e questo percorso riprende da dove finisce.