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

Einstieg in Google Go

Titel: Einstieg in Google Go Kostenlos Bücher Online Lesen
Autoren: Dr. Mario Deilmann , Christian Himpel
Vom Netzwerk:
Hello... an den Browser geschickt wird. Innerhalb der If -Bedingung sehen wir jeweils einen Aufruf der Funktion Fprintln aus dem Paket fmt . Funktionen in Paketen sind über dieses Schema zu erreichen, also fmt.Fprintln . In Go kann man Funktionen im gleichen Namensraum nicht überladen. Es muss für jede Funktion ein eigener Name gefunden werden. Das Gleiche gilt auch für Pakete. Zwei Pakete, die gleich heißen, dürfen nicht unter dem gleichen Namen eingebunden werden, allerdings können beim Importieren Pakete umbenannt werden. Somit würde durch import format "fmt" das Paket fmt unter dem Namen format eingebunden. Und wir müssten format.Fprintln schreiben, um die Funktion aufzurufen. Der Anfangsbuchstabe bestimmt die Sichtbarkeit einer Funktion, einer Struktur, von Feldern in Strukturen etc. Beginnt z. B. eine Funktion mit einem Großbuchstaben, wird diese implizit exportiert und kann außerhalb des Pakets aufgerufen werden. Beginnt sie stattdessen mit einem Kleinbuchstaben, ist die Funktion nur innerhalb desselben Pakets sichtbar. Im Sinne von Java könnte man also sagen, dass es nur public und package private gibt.
    Variadische Funktionen
    Schauen wir uns nun die Funktion fmt.Fprintln etwas näher an. Die Funktion hat folgende Signatur:
    func Fprintln(w io.Writer, a ...interface{})
(n int, err os.Error)
    Die Funktion fmt.Fprintln ist eine variadische Funktion. Variadische Funktionen bekommen eine vorher nicht näher bestimmte Anzahl von Argumenten übergeben. Im vorliegenden Fall ist das erste Argument allerdings Pflicht. Anhand des zweiten Arguments sieht man die Syntax des variadischen Arguments, diese werden also mit ... vor dem Typ angegeben. Weiterhin sieht man sofort, dass die Funktion zwei Rückgabewerte hat. Wenn man die Dokumentation zu Rate zieht, erfährt man, dass n die Anzahl der geschriebenen Bytes ist und mit err ein womöglich aufgetretener Fehler zurückgegeben wird. Nun wird also der http.ResponseWriter , der mit w im Beispiel bezeichnet wurde, als Ziel unserer formatierten Ausgabe benutzt. Im ersten Fall werden ganz simpel die beiden Zeichenketten Hello, und World! an die Funktion übergeben. Die Fprintln -Funktion trennt die beiden Argumente Hello, und World! mit einem Leerzeichen und beendet die Ausgabe mit einem Newline-Zeichen. Schickt der Client nun mehr als den Schrägstrich mit seiner Anfrage mit, landen wir im zweiten Fall. Hier benutzen wir wieder w als io.Writer und übergeben direkt den Rückgabewert von HelloString als Argument.
    Slices von Arrays/Slices/Zeichenketten
    Das Argument, das HelloString übergeben wird, kennt der eine oder andere vielleicht schon aus Python. In Go ist es möglich, Zeichenketten und Arrays zu „slicen“. Das ist nichts anderes, als einen Teilbereich auszuschneiden und mit diesem weiterzuarbeiten. Im vorliegenden Fall wird mittels r.URL.Path[1:] ein Slice erzeugt, in welchem das erste Zeichen ausgeschnitten wurde. Es wird damit nur eine neue Ansicht auf die Zeichenkette erzeugt. Wenn also der Pfad /Entwickler in der Anfrage benutzt worden ist, so wird lediglich Entwickler an HelloString weitergereicht. Man sollte beachten, dass das Slicen sehr effizient ist. Es muss dafür keine neue Zeichenkette erzeugt werden. Slices können mit dem Schlüsselwort make erzeugt werden. Um ein Slice von Integern der Länge 10 zu erzeugen, schreibt man v := make([]int, 10) . Mit w := v[5:8] wird ein Slice mit 3 Integern erzeugt, welcher nur noch die Sicht auf die Werte an Position 5, 6 und 7 freigibt. Dabei wird nichts kopiert, die Ansicht wird nur geändert, weist man v[6] = 100 zu, ist w[1] == 100 . Slices erinnern eher an Arrays wie man sie aus C oder Java kennt.
    Das was in Go als Array bezeichnet wird, ist ein Speicherbereich mit einer festen Länge. Das heißt, die Länge gehört mit zu seinem Typ. Ein Beispiel: var v1 [10]int erzeugt ein Array von Integern der Länge 10. Hat man nun ein Array der Form var v2 [8]int , ist dies ein Array von Integern der Länge 8. v1 und v2 sind von unterschiedlichen Typen, deshalb kann man z. B. weder v1   =  v2 , noch v2 = v1 zuweisen. Man kann aus beiden Arrays allerdings Slices erzeugen, mit der Syntax, die oben gezeigt wurde, z. B. var s []int = v1[:] um ein Slice mit 10 Elementen, also seiner vollen Länge, daraus zu erzeugen. Konzeptionell wird beim Erzeugen eines Slices mit make eine Struktur mit drei Feldern angelegt. Dabei handelt es sich um einen Zeiger auf ein Array, Länge und Kapazität. Genauso wie die

Weitere Kostenlose Bücher