Time is ticking...

Gostradamus – Einfache Zeitverarbeitung in Go

Michael Bykovski

© Shutterstock / Lukas Jonaitis

Go, die Programmiersprache von Google, hat viele Vorteile und macht Entwicklern das Leben leichter. Dennoch erreicht auch sie – etwa im Bereich Zeitverarbeitung – trotz der umfangreichen und guten Standardbibliothek noch lange nicht die Perfektion. Ein kleines Stückchen perfekter wird Go daher mit der Bibliothek Gostradamus.

Die Programmiersprache Go ist noch eine relativ junge Programmiersprache (2007) im Vergleich zu anderen wie beispielsweise Python (1991) oder C (1972). Nichtsdestotrotz gewinnt Go mehr an Beliebtheit, sodass auch Open-Source-Projekte wie Kubernetes, Docker oder Prometheus diese Programmiersprache nutzen.

Go hat eine moderne und umfangreiche Standardbibliothek, auch „Packages“ genannt. Mithilfe der Packages können Anwendungen von moderner Webentwicklung bis hin zu Cluster- und Cloud-Lösungen einfacher und schneller entwickelt werden. Das liegt zum Beispiel daran, dass diese Bibliotheken nicht wie beispielsweise eine Template-Engine von Grund auf neu implementiert werden müssen.

Bei allem Respekt vor der großen und guten Standardbibliothek und dem fleißigen Team der Go-Entwickler gibt es dennoch eine kleine Schwachstelle: die time-Bibliothek. Immer wieder höre ich von verschiedenen Go-Entwicklern und sammle auch selbst die Erfahrung, dass die time-Bibliothek unnötig kompliziert und dadurch schwer zu nutzen ist. Schauen wir uns zum Beispiel einmal das Parsen von folgendem String an:

15.04.2018 10:25:02

Um den gezeigten String in Go zu parsen, müssen wie in allen Sprachen bestimmte Tokens verwendet werden:

import time

t, err := time.Parse("02.01.2006 15:04:05", "15.04.2018 10:25:02")

Go setzt beim Parsen auf eine „natürliche“ Darstellung des Formats, wie hier in dem Beispiel 02 als Tag, 01 als Monat und 2006 als Jahr und so weiter. Die Tokens sind sich aber für Neuankömmlinge und auch für erfahrene Nutzer recht schwer zu merken. Normalerweise verwenden die meisten Programmiersprachen Formate wie %D oder DD. Ein weiteres Beispiel ist das Setzen des aktuellen Zeitobjekts auf ein bestimmtes Datum:

import time
t := time.UTC()

t = time.Date(t.Year(), t.Month(), 10, t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), t.Location()))

Gostradamus kommt zur Rettung

Bei Go geht es immer darum, alles so einfach und intuitiv wie möglich zu programmieren, doch leider ist die Bibliothek weder einfach noch intuitiv. Und somit wurde Gostradamus ins Leben gerufen. Gostradamus ist eine Bibliohek für Go, die die time-Bibliothek wrapped und eine neue einfache und intuitive Schnittstelle bietet. Objekte können einfach zwischen dem gostradamus.DateTime– und dem time.Time-Objekt hin und her typecasted werden. Darüber hinaus bietet Gostradamus sehr viele nützliche Funktionen für die Arbeit mit Zeitobjekten an.

Schauen wir uns doch einfach das erste gezeigte Beispiel an, implementiert in Gostradamus:

import "github.com/bykof/gostradamus"

dt, err := gostradamus.Parse("14.07.2017 02:40:00", "DD.MM.YYYY HH:mm:ss")

Und das zweite Beispiel in Gostradamus:

import "github.com/bykof/gostradamus"

dt := gostradamus.UTCNow()
dt = dt.ReplaceDay(10)

Einfach und intuitiv.

Mit Gostradamus können auch sogenannte Spans, also Zeitspannen, einfach erzeugt werden. Beispielsweise möchten wir den Start und das Ende des aktuellen Monats mit Gostradamus erzeugen:

import "github.com/bykof/gostradamus"

dt := gostradamus.Now()
start, end := dt.SpanMonth()

Wer sich Gostradamus näher ansehen oder daran mitarbeiten will, kann dies sehr gerne auf GitHub tun. Dort finden sich alle Informationen zum Projket.

Verwandte Themen:

Geschrieben von
Michael Bykovski

Michael Bykovski entwickelt seit etwa 14 Jahren Software. Seit 2013 beschäftigt er sich intensiv mit der agilen Arbeits- und auch Denkweise. Er ist der Meinung, dass alles was ein Zertifikat hat und sich agil nennt, nicht agil sein kann. In seiner Bachelorarbeit beschäftigte sich Michael mit der Entwicklung einer Architektur für agile Geschäftsprozesse. Er ist ein Software- und Business Process-Enthusiast, der gerne auch Pionierarbeit in diesen Bereichen entwickelt.

Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: