WebMap – Teil 2: Go struct in MongoDB speichern

In Teil 1 der WebMap Serie wurde gezeigt, wie in einer Goroutine Domain-Namen generiert, in einen Channel geschrieben und an anderer Stelle im Programm weiterverarbeitet werden können. Der Code des ersten Teils ist auf GitHub zu finden. Im zweiten Teil werden Informationen zu einer Domain in einem Struct festgehalten und…

WebMap – Teil 1: Das Internet kartografieren

Die IdeeNachdem ich vor kurzem herausfinden wollte, was für Domains auf einem Shared Hosting Server liegen und feststellen musste, dass das nicht ohne Weiteres möglich ist, stieß ich bei der Recherche auf viele Seiten (z. B.: https://www.whoisxmlapi.com/) welche kuratierte Daten von Domains zum Kauf anbieten. Somit kam…

Golang: Mutex

Bei der Verwendung von Goroutinen kann es mitunter vorkommen, dass aus mehreren Goroutinen auf dieselben Ressourcen zugegriffen wird, was zu Race Conditions führen kann. Hierbei handelt es sich um schwer nachvollziehbare Fehler, welche häufig erst bei der Ausführung des Programms auffallen. Um zu verhindern, dass mehrere Goroutinen gleichzeitig eine Variable…

Golang: Channels

Wie in dem Beitrag über Goroutines zu sehen war, gestaltet sich die Verwendung dieser in Golang als durchaus einfach. Allerdings wurden für die dort gezeigten Anwendungsfälle auch recht simple Szenarien verwendet. Komplexer kann es werden, wenn zwischen verschiedenen Goroutinen eine Kommunikation notwendig ist. Um diese zu ermöglichen, bietet Golang Channels…

Golang: Threading mit Hilfe von goroutines

Mittels Goroutines lassen sich in Go leichtgewichtige Threads starten. Unter Verwendung des go Statements lassen sich Funktionen, Anonyme-Funktionen oder Methoden als Goroutine ausführen. Die Main-Function eines Go-Programms kann auch als Goroutine betrachtet werden. Dabei gilt zu beachten, dass keine Goroutines mehr ausgeführt werden, sobald der Main-Thread beendet wurde. Verdeutlichen lässt…

Praktischer Einstieg in Go Modules

Seit der Version 1.11 bietet Go mit den Modulen einen neuen Weg für das Dependency Management an. Musste es zunächst noch über ein Flag explizit aktiviert werden, ist das seit der Version 1.13 standardmäßig der Fall. Es empfiehlt sich also, zukünftige Projekte direkt unter Verwendung der Module zu…