Go

Untersuchung von Methoden um Dateien in Go mit embed zu laden

Es gibt verschiedene Möglichkeiten, Dateien in Go zu laden. Man kann Dateien mittels os.ReadFile() lesen oder das embed-Paket verwenden, um sie einzubinden. Obwohl die Verwendungszwecke leicht unterschiedlich sind, ist das embed-Paket besonders nützlich, da es ermöglicht, Dateien bereits beim Build einzubinden – was vor allem bei der Distribution von Vorteil ist. Betrachten wir ein einfaches Beispiel: Erstellen wir eine txt-Datei wie folgt hello.txtHello, World! Nun holen wir uns diese Datei mittels des embed-Pakets:

Mehr lesen →

16. April 2025

Wie man Formulardaten im Body von Golang sendet

Ich arbeite gerade an einem Projekt, in dem ich externe APIs verwenden muss. Im Gegensatz zu herkömmlichen APIs, die JSON oder XML austauschen, musste ich Formulardaten senden und empfangen. Der Autor hat dies zwar schon in JSP behandelt, aber in meiner aktuellen Berufserfahrung hatte ich damit kaum Kontakt, sodass es schon eine lange Zeit her ist, seit ich Formulardaten verwendet habe. Daher wusste ich nicht genau, wie das in Go funktioniert.

Mehr lesen →

14. April 2025

Lassen Sie uns alle Beiträge mit AI auf Hugo übersetzen (feat. Warum mein Blog fünf Sprachen unterstützt)

Aufgabe Mit der jüngsten Entwicklung der KI habe ich begonnen, Gemini für meine Arbeit zu verwenden. Während ich sah, wie gut es unstrukturierte Daten verarbeitet, erinnerten mich die früheren wehmütigen Arbeiten, die ich gemacht hatte, an meine Erfahrungen. Um es kurz zu machen, ich hatte schon lange das Gefühl, dass ich die Aufgabe habe, meinen Blog zu übersetzen. Ich hörte früher, dass viele mehr Leser kommen würden, wenn ich ihn übersetze, und ich dachte einmal darüber nach, die Google Translate API zu verwenden, aber ich ließ es einfach bleiben, da ich bequem war.

Mehr lesen →

6. März 2025

Lassen Sie uns Mermaid-Diagramme in Hugo Blog rendern

Derzeit benutze ich den Template-Engine Hugo für meinen Technik-Blog. Hugo ist ein statischer Seiten-Generator, der Markdown-Dateien in HTML umwandelt. Das Markdown, das wir häufig verwenden, enthält Blockcode. Der folgende Go-Code wird ebenfalls schön mit Syntax-Highlighting angezeigt: func main() { fmt.Println("Hello, World!") } Der Java-Code zeigt sich ebenso mit Syntax-Highlighting durch einen Blockcode:

Mehr lesen →

6. März 2025

Lass uns effizienter mit FSM und Golang umgehen

Zu viele Zustände! Wer viel in der Branche arbeitet, wird feststellen, dass es wirklich für jede Kleinigkeit einen Zustand gibt. Zum Beispiel gibt es zahlreiche Zustände wie den Anmeldezustand eines Benutzers, den Bestellstatus, den Zahlungsstatus usw. Diese Zustände werden in der Regel im Code oder in der Datenbank gespeichert und genutzt, um je nach Zustand verschiedene Logiken auszuführen. Prämisse Zwar steht auch das von REST gehandhabte Daten selbst für “Representational State Transfer”, was sich mit Zuständen befasst, aber in diesem Text wird ein enger gefasstes Verständnis von Zuständen betrachtet.

Mehr lesen →

22. Februar 2025

Golang-Tests automatisch via GitHub Actions beim Erstellen eines PR ausführen und einen Bericht erstellen

Egal wo und in welcher Sprache: Die Automatisierung von Build oder Tests ist für Tests von großer Bedeutung. Natürlich kann man Tests lokal ausführen und hochladen, jedoch wird beim Arbeiten häufig übersehen, Tests durchzuführen. Daher ist es sinnvoller, weniger von der lokalen Umgebung abhängig zu sein und Automatisierungen einzurichten, die langfristig gut funktionieren und weniger Wartungskosten verursachen. Dieser Beitrag beschreibt, wie man eine Aktion für Tests in Golang erstellt, die Tests automatisch beim Erstellen eines PR ausführt und einen Bericht generiert.

Mehr lesen →

17. Februar 2025

Testen ohne Cache in Golang

Beim Testen in Golang wird der Test ab dem zweiten Durchlauf sehr schnell. 1. Durchlauf ok github.com/my/package/test 126.752s 2. Durchlauf ok github.com/my/package/test (cached) Im ersten Durchlauf dauerte es über 2 Minuten, aber beim zweiten Durchlauf war der Test blitzschnell abgeschlossen, ohne dass man die Zeit messen konnte.

Mehr lesen →

14. Februar 2025

Webcrawling mit Playwright in Golang

Es gibt verschiedene Methoden, um Daten zu sammeln, aber die gebräuchlichste Methode ist die Verwendung der Technik des Web-Crawlings. Das Wort “Crawling” kann als “Kriechen” übersetzt werden. Web-Crawling bedeutet, durch das Web zu kriechen und Informationen zu sammeln. Werkzeuge Python wird besonders häufig verwendet, teilweise wegen der Einfachheit der Programmiersprache, aber auch wegen der Vielzahl an spezialisierten Bibliotheken für das Crawling. Bekannte Werkzeuge sind BeautifulSoup, Selenium und Scrapy.

Mehr lesen →

14. Februar 2025

Unterschied zwischen log.Fatal() und panic() in Golang verstehen

“In diesem Fall scheint es besser zu sein, panic() statt log.Fatal() zu verwenden” Kürzlich erhielt ich das oben genannte Feedback, als ich log.Fatal() verwendete. Hm? Ich dachte, log.Fatal() gibt einfach nur die Logs besser aus, oder? Offen gesagt, habe ich erst kürzlich den Unterschied zwischen log.Fatal() und panic() in Golang verstanden, und ich möchte dies nun zusammenfassen. Unterschiede zwischen log.Fatal() und panic() log.Fatal() und panic() sind beides Funktionen, die das Programm beenden. Schauen wir uns den Code an:

Mehr lesen →

11. Februar 2025

Erstellen eines robusten Servers mit Singleflight in Golang bei doppelten Anfragen

Kürzlich hat mein Unternehmen geschlossen, und ich arbeite vorübergehend als Freiberufler. Glücklicherweise habe ich einen hervorragenden Mentor kennengelernt, von dem ich viele Fähigkeiten über Go oder Web gelernt habe. Eine dieser Fähigkeiten war die Optimierung mit dem Singleflight-Paket. Singleflight? Wörtlich übersetzt bedeutet es „Einzelflug“. Tatsächlich muss man es nicht kompliziert verstehen, denn es garantiert eine einzelne Ausführung. Ein Beispiel macht es noch einfacher, werfen wir einen Blick auf den folgenden Code:

Mehr lesen →

10. Februar 2025

Erleben wir Lombok in Golang

Lombok? Lombok ist eine Bibliothek in Java, die sich wiederholende Codes wie getter und setter reduziert. In Go ist das Erstellen von Getter, Setter und Konstruktoren aufgrund der Besonderheiten der Sprache recht mühsam. In Sprachen wie Java gibt es Bibliotheken, die solche Arbeiten automatisieren. Angenommen, wir erstellen einen Konstruktor für die folgende Struktur. type User struct { Name string Age int } Die meisten würden wahrscheinlich einen Konstruktor wie folgt erstellen.

Mehr lesen →

24. Oktober 2023

Unterschiede zwischen Type Alias und Named Type verstehen (Golang)

Beide sind Methoden zur Neudefinition bestehender Typen bei der Typdefinition und werden wie folgt definiert. type MyStruct struct { Name string Age int } func(m MyStruct) Print(){ fmt.Println(m.Name, m.Age) } type MyStructNamed MyStruct // Named Type type MyStructAlias = MyStruct // Type Alias Type Alias Bei einem Type Alias bleibt der bestehende Typ unverändert, da ein Alias für den bestehenden Typ erstellt wird. Daher besitzt er die gleichen Methoden wie der ursprüngliche Typ.

Mehr lesen →

13. Oktober 2023

Lösung des Problems mit der Zeichenverfälschung im exportierten CSV-Datei unter Golang

BOM Excel benötigt am Anfang der Datei eine BOM, um eine UTF-8-codierte CSV-Datei korrekt zu lesen. BOM: Byte Order Mark (Byte-Reihenfolgemarkierung, BOM) ist das Unicode-Zeichen U+FEFF zur Byte-Reihenfolgemarkierung und kann als Magic Number am Anfang eines Dokuments hinzugefügt werden, um Programmen verschiedene Informationen zu übermitteln. Im Code Wenn Sie in Golang csv verwenden, können Sie das Problem der Zeichenverfälschung wie folgt verhindern. package main import ( "encoding/csv" "os" ) func main() { file, err := os.Create("test.csv") if err != nil { panic(err) } defer file.Close() // HINWEIS: UTF-8 BOM hinzufügen file.WriteString("\xEF\xBB\xBF") writer := csv.NewWriter(file) defer writer.Flush() data := [][]string{ {"이름", "나이", "주소"}, {"홍길동", "30", "서울"}, {"김영희", "25", "부산"}, } for _, value := range data { err := writer.Write(value) if err != nil { panic(err) } } } Referenz Byte Order Mark - Wikipedia

Mehr lesen →

23. September 2023

Verwendung von Templates in Golang (Go Template)

Go Template In Golang gibt es eine Funktion namens Go Template, die es ermöglicht, verschiedene Daten gemäß einem festgelegten Format zu binden oder manipulierte Zeichenfolgen auszugeben. text/template Paket Es gibt zwei Standardbibliothekspakete zur Verarbeitung von textbasierten Templates, die häufig verwendet werden, wenn Text nach einem bestimmten Format oder einer bestimmten Logik generiert werden muss. Ein Beispiel für die Ausgabe von Text im festgelegten Format mithilfe des Pakets text/template ist unten dargestellt. package main import ( "os" "log" "text/template" ) type Person struct { Name string Age int } func main() { t := template.New("hello") t, err = t.Parse("Hello {{.Name}}, you are {{.Age}} years old.\n") if err != nil { log.Error(err) } p := Person{Name: "GiraffeWithCode", Age: 27} t.Execute(os.Stdout, p) } Wie im Code sichtbar, ist es leicht zu erkennen, dass in der Struktur Person die Felder Name und Age als Elemente in die Template-Zeichenkette "Hello {{.Name}}, you are {{.Age}} years old.\n" gebunden werden.

Mehr lesen →

23. September 2023