From 6f4035aef8f123ff72ef3f9ecce81ad3e0369104 Mon Sep 17 00:00:00 2001 From: Teena Steger Date: Tue, 28 Apr 2026 13:05:20 +0200 Subject: [PATCH] 07: Demos --- web/07/demos/00_method_receiver.go | 26 ++++++++++++++ web/07/demos/01_helloworld_http.go | 18 ++++++++++ web/07/demos/02_responsewriter_http.go | 19 +++++++++++ web/07/demos/03_get_request_http.go | 36 ++++++++++++++++++++ web/07/demos/04_post_request_http.go | 47 ++++++++++++++++++++++++++ web/07/demos/05_encode_json.go | 28 +++++++++++++++ web/07/demos/06_decode_json.go | 26 ++++++++++++++ web/07/demos/post_form.html | 22 ++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 web/07/demos/00_method_receiver.go create mode 100644 web/07/demos/01_helloworld_http.go create mode 100644 web/07/demos/02_responsewriter_http.go create mode 100644 web/07/demos/03_get_request_http.go create mode 100644 web/07/demos/04_post_request_http.go create mode 100644 web/07/demos/05_encode_json.go create mode 100644 web/07/demos/06_decode_json.go create mode 100644 web/07/demos/post_form.html diff --git a/web/07/demos/00_method_receiver.go b/web/07/demos/00_method_receiver.go new file mode 100644 index 0000000..00f8020 --- /dev/null +++ b/web/07/demos/00_method_receiver.go @@ -0,0 +1,26 @@ +package main + +import "fmt" + +type Person struct { + Name string + Age int +} + +// Wert-Receiver: arbeitet auf einer Kopie +func (p Person) Greet() { + fmt.Println("Hallo,", p.Name) +} + +// Zeiger-Receiver: kann das Original ändern +func (p *Person) Birthday() { + p.Age++ +} + +func main() { + a := Person{Name: "Karl", Age: 30} + + a.Greet() // Ausgabe: Hallo, Karl + a.Birthday() // Alter wird erhöht + fmt.Println(a.Age) // Ausgabe: 31 +} diff --git a/web/07/demos/01_helloworld_http.go b/web/07/demos/01_helloworld_http.go new file mode 100644 index 0000000..858f83f --- /dev/null +++ b/web/07/demos/01_helloworld_http.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "net/http" +) + +type helloHandler int + +func (hello helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello World %d!", hello) +} + +func main() { + var world helloHandler + world = 42 + http.ListenAndServe("localhost:8080", world) +} diff --git a/web/07/demos/02_responsewriter_http.go b/web/07/demos/02_responsewriter_http.go new file mode 100644 index 0000000..da73765 --- /dev/null +++ b/web/07/demos/02_responsewriter_http.go @@ -0,0 +1,19 @@ +package main + +import ( + "net/http" +) + +type respExampleHandler int + +func (hello respExampleHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Header().Set("my-http-header", "Ein beliebiger Text") + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusFound) + w.Write([]byte("

Dies ist eine HTML-Überschrift

")) +} + +func main() { + var r respExampleHandler + http.ListenAndServe("localhost:8080", r) +} diff --git a/web/07/demos/03_get_request_http.go b/web/07/demos/03_get_request_http.go new file mode 100644 index 0000000..5462ffd --- /dev/null +++ b/web/07/demos/03_get_request_http.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + "net/http" +) + +type reqExampleHandler int + +func (hello reqExampleHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + + if r.Method != http.MethodGet { + http.Error(w, "Only GET requests are allowed", http.StatusMethodNotAllowed) + return + } + + fmt.Println("Method:", r.Method) + fmt.Println("URL:", r.URL.String()) + fmt.Println("Host:", r.Host) + fmt.Println("Accept-Header", r.Header.Get("Accept")) + + queryParams := r.URL.Query() + fmt.Println("Query Parameters:") + for key, values := range queryParams { + for _, value := range values { + fmt.Printf(" %s = %s\n", key, value) + } + } + + w.Write([]byte("

GET: http.Request-Beispiel

")) +} + +func main() { + var r reqExampleHandler + http.ListenAndServe("localhost:8080", r) +} diff --git a/web/07/demos/04_post_request_http.go b/web/07/demos/04_post_request_http.go new file mode 100644 index 0000000..b311cf6 --- /dev/null +++ b/web/07/demos/04_post_request_http.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "net/http" +) + +type formExampleHandler int + +func (formHandler formExampleHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + + if r.Method != http.MethodPost { + http.Error(w, "Only POST requests are allowed", http.StatusMethodNotAllowed) + return + } + + // Formulardaten parsen und Überprüfen, ob ungültige Formulardaten gesendet wurde + if err := r.ParseForm(); err != nil { + http.Error(w, "Fehler beim Parsen des Formulars", http.StatusBadRequest) + return + } + + // Überprüfen, ob leeres Formular gesendet wurde + if len(r.PostForm) == 0 { + http.Error(w, "Kein POST-Formular gesendet", http.StatusBadRequest) + return + } + + // Zugriff auf PostForm-Daten + // string mit Wert des Feldes "name" + name := r.PostForm.Get("name") + // []string mit allen ausgewählten Werten der Checkbox "hobby" + hobbies := r.PostForm["hobby"] + + // Ausgabe der Werte + fmt.Fprintf(w, "Name: %s\n", name) + fmt.Fprintf(w, "Hobbies:\n") + for _, h := range hobbies { + fmt.Fprintf(w, "- %s\n", h) + } + +} + +func main() { + var r formExampleHandler + http.ListenAndServe("localhost:8080", r) +} diff --git a/web/07/demos/05_encode_json.go b/web/07/demos/05_encode_json.go new file mode 100644 index 0000000..f336013 --- /dev/null +++ b/web/07/demos/05_encode_json.go @@ -0,0 +1,28 @@ +package main + +import ( + "encoding/json" + "net/http" +) + +type jsonEncodeHandler int + +type User struct { + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Age int `json:"age"` +} + +func (jsonHandler jsonEncodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + mariam := User{ + Firstname: "Mariam", + Lastname: "Okonkwo", + Age: 25, + } + json.NewEncoder(w).Encode(mariam) +} + +func main() { + var enc jsonEncodeHandler + http.ListenAndServe("localhost:8080", enc) +} diff --git a/web/07/demos/06_decode_json.go b/web/07/demos/06_decode_json.go new file mode 100644 index 0000000..a604cd7 --- /dev/null +++ b/web/07/demos/06_decode_json.go @@ -0,0 +1,26 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" +) + +type jsonDecodeHandler int + +type User struct { + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Age int `json:"age"` +} + +func (jsonHandler jsonDecodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + var user User + json.NewDecoder(r.Body).Decode(&user) + fmt.Fprintf(w, "%s %s is %d years old!", user.Firstname, user.Lastname, user.Age) +} + +func main() { + var dec jsonDecodeHandler + http.ListenAndServe("localhost:8080", dec) +} diff --git a/web/07/demos/post_form.html b/web/07/demos/post_form.html new file mode 100644 index 0000000..8ad9fa7 --- /dev/null +++ b/web/07/demos/post_form.html @@ -0,0 +1,22 @@ + + + + + + Einfaches Formular für Backend + + + +
+ + +

Hobbies: + + + +

+ +
+ + + \ No newline at end of file