Czy Go nadaje się do nauki algorytmów i struktur danych?
Tak. Kompiluje się do szybkiego kodu natywnego, jego składnia jest na tyle mała, że czytasz głównie sam algorytm, a typy generyczne (od Go 1.18) pozwalają wielokrotnie używać typowanego stosu czy kopca. Ceną jest oszczędna biblioteka standardowa: poza slice'ami, mapami, container/list i container/heap struktury piszesz samodzielnie, co na ścieżce nauki jest właśnie celem. Na Go działa też duża część dzisiejszej infrastruktury chmurowej, w tym Docker i Kubernetes, co czyni go naturalnym językiem na rozmowy na stanowiska backendowe.
Które typy i pakiety Go odpowiadają którym strukturom danych?
Slice to tablica dynamiczna, a z append i przycinaniem także twój stos. Mapa to tablica mieszająca, a map[T]struct{} to idiomatyczny zbiór. container/list to lista dwukierunkowa, a container/heap obsługuje kopiec binarny na dowolnym typie implementującym heap.Interface. Nie ma typu kolejki, drzewa, drzewa trie ani grafu, więc te budujesz samodzielnie, w krokach pierwszym i drugim.
Jak działa container/heap w Go?
Implementujesz heap.Interface na własnym typie slice'a: Len, Less i Swap z sort.Interface plus Push i Pop, które tylko dopisują element na końcu slice'a i go stamtąd usuwają. Potem wywołujesz funkcje pakietu heap.Push i heap.Pop, nigdy własne metody, a one przesuwają elementy w górę i w dół, utrzymując porządek. Wygląda to dziwnie, dopóki nie napiszesz kopca samodzielnie, co robisz w kroku drugim.
Dlaczego iteracja po mapie w Go za każdym razem daje inną kolejność?
Bo Go celowo losuje kolejność iteracji po mapie, żeby żaden program nie zaczął od niej zależeć. Tablica mieszająca w żadnym języku nie ma znaczącej kolejności, Go po prostu dba o to, żeby było to widać. Gdy kolejność ma znaczenie, na przykład w wyniku porównywanym przez test, zbierz klucze do slice'a i go posortuj albo trzymaj slice obok mapy.
Które kursy z tej ścieżki nie są prowadzone w Go?
Trzy: programowanie dynamiczne i seria rekrutacyjna w Pythonie, prowadzone w Pythonie, oraz operacje na bitach, prowadzone w C++. Są wymienione po krokach, każdy z linkiem, który otwiera go w jego własnym języku. Tablica memoizacji w Go to slice albo mapa, a Go dodaje jeden operator bitowy, którego brakuje w C++: &^, AND NOT, który zeruje w lewym operandzie każdy bit ustawiony w prawym.
Czy muszę znać Go, zanim zacznę tę ścieżkę?
Przynajmniej struktury, wskaźniki, slice'y, mapy i metody. Typy generyczne pomagają, a poznasz je po drodze. Jeśli to dla ciebie nowość, kurs Go w Coddy najpierw cię tam doprowadzi, za darmo, a ta ścieżka zaczyna się tam, gdzie on się kończy.