Grundlagen von Go Web Applikationen

Prinzip einer Web-Applikation

  • Grundlage ist das Hypertext Transfer Protokoll HTTP
  • Client sendet einen HTTP Request
  • Server verarbeitet den Request
  • Server antwortet mit HTTP Response
  • Das Format des Request wird oft von einer Web-Applikation mit Hyperlinks auf einer Webseite vorgegeben
HTTP Kommunikation zwischen Web Client und Web Server

HTTP Kommunikation zwischen Web Client und Web Server

Zwei einfache Beispiele

Das Hello Web Beispiel
  • Kern der Go Web Applikationen sind Handler Objekte bzw. Handler Funktionen.
    • Sie erhalten einen Zeiger auf den HTTP Request (*http.Request) und erzeugen den HTTP Response, indem sie Ausgaben auf den http.ReponseWriter schreiben.
    • Die Handler-Funktion hat Zugriff auf alle Elemente des HTTP Requests.
  • Zu allererst wird der eingehende HTTP Request an einen sogenannten Multiplexer geleitet. Er bestimmt aus der URL, welcher Handler den Request bearbeiten soll.
  • http.ListenAndServe startet den Server auf dem angegebenen Port. Der Parameter nil bewirkt, dass der DefaultServeMux aus der Go Standardbibliothek verwendet wird.
  • http.HandleFunc registriert die Handler-Funktion hello beim DefaultServeMux Multiplexer für den relativen Pfad „/“.
    • Die einfachste Web-App schreibt einfach einen String in den ResponseWriter.
package main

import (
     "fmt"
     "net/http"
)

func hello(writer http.ResponseWriter, request *http.Request) {
     fmt.Fprintf(writer, "Hello from Go, %s!", request.URL.Path[1:])
}

func main() {
     http.HandleFunc("/", hello)
     http.ListenAndServe("0.0.0.0:8080", nil)
}
Go Webserver kann statische Seiten bereitstellen
  • Eine Webapp enthält meist statische Inhalte → Dateien
    • statische HTML-Seiten, Grafiken, Fonts, css Styles, Downloads, JavaScript, Flash, …
  • Dazu muss der absolute Pfad dieser Dateien bekannt sein
    • In produktiven Applikationen ein spezielles Verzeichnis, im Beispiel ein Verzeichnis im Quellcode-Baum (…/pub)
  • http.FileServer aus der Standardbibliothek macht Dateien zugreifbar
    • http.FileServer ist ein spezialisierter Handler
	// hole einen DefaultServeMux
	mux := http.NewServeMux()
	// finde Working directory = GOPATH
	pwd, _ := os.Getwd()
	// und hänge den ganzen Pfad zu den statischen Files dahinter
	dir := http.Dir(pwd + "/src/github.com/geobe/go4web/webmain1/pub")
	files := http.FileServer(dir)
	// unter der URL /static/ werden files bereitgestellt,
	// Präfix /static/ wird abgeschnitten
	mux.Handle("/static/", http.StripPrefix("/static/", files))

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.