Bücher online kostenlos Kostenlos Online Lesen
Einstieg in Google Go

Einstieg in Google Go

Titel: Einstieg in Google Go
Autoren: Dr. Mario Deilmann , Christian Himpel
Vom Netzwerk:
http.HandleFunc :
    func HandleFunc(pattern string, handler
func(ResponseWriter, *Request))
    Als zweites Argument wird eine Funktion erwartet, welche genau die Signatur von Hello hat. In Go sind Funktionen First Class Citizens, d. h. man hat ähnlich, wie in funktionalen Programmiersprachen die Möglichkeit, Funktionen on the Fly zu erzeugen. Ein Beispiel ist in Listing 1.5 dargestellt.
    http.HandleFunc("/status",
func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Function HelloString was %d
times callednow!\n", state)
}
)
    Listing 1.5
    Hier haben wir nun einen neuen Handler direkt während des Funktionsaufrufs von http.HandleFunc erzeugt.
    In der zweiten Zeile von main wird der HTTP-Server auf Port 1234 mit http.ListenAndServe gestartet. Diese Funktion liefert ein os.Error -Interface zurück, welches z. B. nicht nil ist, wenn der Port bereits belegt ist. Variablen können in Go explizit deklariert werden, z. B. mit var err os.Error . Dies kann allerdings auch mit dem := -Operator abgekürzt werden. Der Typ wird zur Compile-Zeit ermittelt und die Variable mit dem Wert auf der rechten Seite initialisiert.
    Zurück zum eigentlichen Code. Das Interface os.Error fordert eine Methode String() string . Und warum kann nun err direkt als Argument an fmt.Println gegeben werden? Nun, zum einen erwartet fmt.Println eine beliebige Anzahl von leeren Interfaces ( interface{} ), und jeder Typ implementiert das leere Interface, denn es fordert keine Methode. In Go gibt es keine Generics wie in Java oder C++. An deren Stelle wird das leere Interface verwendet und zur Laufzeit versucht, zu bekannten Interfaces zu konvertieren. Genau das passiert auch in fmt.Println . Wird nun vom übergebenen Argument das fmt.Stringer -Interface implementiert, wird die Funktion String benutzt, um die Ausgabe zu erzeugen. Im Code sieht das dann ungefähr so aus:
    if s, ok := err.(fmt.Stringer); ok {
// do something with s.String()
}
    Das os.Error -Interface fordert also exakt das gleiche Interface wie fmt.Stringer . Der Unterschied liegt hier in der Semantik, die aber nicht durch die Sprache durchgesetzt wird. Man könnte also jeden fmt.Stringer als os.Error behandeln, selbst wenn es der Programmierer nie beabsichtigt hat, dass seine Klasse als os.Error verwendet werden sollte.
    Warum wird denn überhaupt ein Fehler zurückgeliefert? Ganz einfach, in Go gibt es keine Exceptions wie in C++ oder Java. Bei Fehlern wird sehr oft os.Error häufig in Kombination mit dem eigentlichen Resultat zurückgegeben ( fmt.Println ). Bei sehr schweren Fehlern wie nil -Zeiger-Dereferenzierung oder unzureichendem Speicher, wird eine so genannte panic ausgelöst, die ohne Behandlung, ähnlich wie in Java die berühmte NullPointerException , das Programm abbricht und einen Stacktrace anzeigt.
    Zusammenfassung
    Google Go ist weit mehr als lediglich ein weiterer Kandidat auf der Liste der Programmiersprachen. Des Weiteren sind auch Hashmaps, Slices und Zeichenketten direkter Bestandteil der Sprache. Der Verzicht auf einige moderne Sprachelemente wie Generics und Exception Handling macht sich eher positiv als negativ bemerkbar. Die Lesbarkeit und das Verständis von Go-Programmen wird durch einen einheitlichen Coding Style deutlich verbessert. Als Fazit kann man sagen, dass das anfangs nicht ganz eingängige Interfacekonzept und die „Rückwärtsdeklarationen“ Schwierigkeiten bereiten können. Hat man sich allerdings einmal darauf eingelassen, wird man all diese Elemente bald in anderen Programmiersprachen vermissen. Go ist ein relativ junges und sehr aktives Projekt und es ist zu erwarten, dass mit fortschreitender Entwicklung noch interessante Ideen in die Sprache einfließen werden. Es ist zu hoffen, dass Google diese Sprache durch interne Applikationsentwicklung unterstützt und auch zukünftig die Sprachentwicklung finanziert und fördert. Wenn Sie nun Lust haben, sich intensiver mit Go zu beschäftigen, so ist der folgende Link [7] ein idealer Startpunkt.
    Links & Literatur
http://golang.org/doc/go_faq.html#history
http://golang.org/
http://blog.golang.org/2011/10/preview-of-go-version-1.html
http://bit.ly/sjd0JU
http://bit.ly/tgWSqM
http://golang.org/doc/install.html
http://golang.org/doc/effective_go.html
Deilman, M. „OpenMP und inkrementelle Parallelisierung“, Entwickler Magazin 2.2007
Deilman, M. „Multi-Threading mit den Intel Threading Building Blocks und den C++0x-Lambda-Funktionen“, Entwickler Magazin, 2.2008

2 Go parallel
    Im zweiten
Vom Netzwerk:

Weitere Kostenlose Bücher