Eignet sich Go für Datenstrukturen und Algorithmen?
Ja. Es kompiliert zu schnellem nativem Code, seine Syntax ist so klein, dass du beim Lesen vor allem den Algorithmus siehst, und Generics (seit Go 1.18) machen einen typisierten Stack oder Heap wiederverwendbar. Der Preis ist eine schlanke Standardbibliothek: Über Slices, Maps, container/list und container/heap hinaus schreibst du die Strukturen selbst, und auf einem Lernpfad ist das der Sinn der Sache. Auf Go läuft außerdem ein Großteil der heutigen Cloud-Infrastruktur, Docker und Kubernetes eingeschlossen, was es zu einer naheliegenden Interviewsprache für Backend-Rollen macht.
Welche Go-Typen und Pakete entsprechen welchen Datenstrukturen?
Ein Slice ist ein dynamisches Array und mit append und Reslicing auch dein Stack; eine Map ist eine Hashtabelle, und map[T]struct{} ist das idiomatische Set; container/list ist eine doppelt verkettete Liste; und container/heap betreibt einen binären Heap über jedem Typ, der heap.Interface implementiert. Einen Queue-Typ, Baum, Trie oder Graphen gibt es nicht, die baust du also selbst, in den Schritten eins und zwei.
Wie funktioniert container/heap in Go?
Du implementierst heap.Interface auf einem eigenen Slice-Typ: Len, Less und Swap aus sort.Interface, dazu Push und Pop, die nur am Ende des Slices anhängen und entfernen. Dann rufst du die Paketfunktionen heap.Push und heap.Pop auf, nie deine eigenen Methoden, und sie verschieben die Elemente nach oben und unten, damit die Ordnung erhalten bleibt. Das liest sich seltsam, bis du selbst einen Heap geschrieben hast, und das tust du in Schritt zwei.
Warum durchläuft Go eine Map jedes Mal in einer anderen Reihenfolge?
Weil Go die Iterationsreihenfolge von Maps absichtlich zufällig macht, damit kein Programm von ihr abhängig wird. Eine Hashtabelle hat in keiner Sprache eine sinnvolle Reihenfolge; Go sorgt nur dafür, dass du es merkst. Wenn die Reihenfolge zählt, etwa bei einer Ausgabe, die ein Test vergleicht, sammle die Schlüssel in einem Slice und sortiere es, oder führe neben der Map ein Slice mit.
Welche Kurse auf diesem Pfad werden nicht in Go unterrichtet?
Drei: Dynamische Programmierung und die Python-Interviewreihe werden in Python unterrichtet, Bitmanipulation in C++. Sie sind nach den Schritten aufgeführt, jeweils mit einem Link, der den Kurs in seiner eigenen Sprache öffnet. Eine Memo-Tabelle ist in Go ein Slice oder eine Map, und Go hat einen Bitoperator, der C++ fehlt: &^, AND NOT, der im linken Operanden jedes Bit löscht, das im rechten gesetzt ist.
Muss ich Go können, bevor ich mit diesem Pfad anfange?
Mindestens Structs, Zeiger, Slices, Maps und Methoden; Generics helfen, und die kannst du unterwegs lernen. Wenn das neu für dich ist, bringt dich Coddys Go-Kurs zuerst dorthin, kostenlos, und dieser Pfad setzt dort an, wo er endet.