From d7c01f2f0eb0d9571b9bf1aae7910f474dac92ec Mon Sep 17 00:00:00 2001 From: Zakaria Date: Fri, 18 Sep 2026 11:42:15 -0400 Subject: [PATCH] networking and shit --- go.work | 5 ++- networkingHTTP/cmd/client/go.mod | 3 ++ networkingHTTP/cmd/client/http-cl.go | 46 ++++++++++++++++++++++++ networkingHTTP/cmd/server/go.mod | 3 ++ networkingHTTP/cmd/server/http-sv.go | 16 +++++++++ networkingHTTP/cmd/templ/go.mod | 3 ++ networkingHTTP/cmd/templ/http-tp.go | 53 ++++++++++++++++++++++++++++ 7 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 networkingHTTP/cmd/client/go.mod create mode 100644 networkingHTTP/cmd/client/http-cl.go create mode 100644 networkingHTTP/cmd/server/go.mod create mode 100644 networkingHTTP/cmd/server/http-sv.go create mode 100644 networkingHTTP/cmd/templ/go.mod create mode 100644 networkingHTTP/cmd/templ/http-tp.go diff --git a/go.work b/go.work index 5cc5fb3..1698e0d 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.27.0 +go 1.27.1 use ( ./Composite_Types @@ -6,6 +6,9 @@ use ( ./courses ./formatIO ./functions + ./networkingHTTP/cmd/client + ./networkingHTTP/cmd/server + ./networkingHTTP/cmd/templ ./pointers ./strings ./types diff --git a/networkingHTTP/cmd/client/go.mod b/networkingHTTP/cmd/client/go.mod new file mode 100644 index 0000000..891b0df --- /dev/null +++ b/networkingHTTP/cmd/client/go.mod @@ -0,0 +1,3 @@ +module zacksolutions.dev/client + +go 1.27.1 diff --git a/networkingHTTP/cmd/client/http-cl.go b/networkingHTTP/cmd/client/http-cl.go new file mode 100644 index 0000000..c6d89b0 --- /dev/null +++ b/networkingHTTP/cmd/client/http-cl.go @@ -0,0 +1,46 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "os" +) + +const url = "https://jsonplaceholder.typicode.com" + +type todo struct { + ID int `json:id` + Title string `json:title` + Status bool `json: status` +} + +func handler(w http.ResponseWriter, r *http.Request) { + const base = "https://jsonplaceholder." +} + +func main() { + resp, err := http.Get(url + "/todos/1/") + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(-1) + } + + defer resp.Body.Close() + + if resp.StatusCode == http.StatusOK { + body, err := io.ReadAll(resp.Body) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(-1) + } + var item todo + err = json.Unmarshal(body, &item) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(-1) + } + fmt.Printf("%#v", item) + } +} diff --git a/networkingHTTP/cmd/server/go.mod b/networkingHTTP/cmd/server/go.mod new file mode 100644 index 0000000..0c79107 --- /dev/null +++ b/networkingHTTP/cmd/server/go.mod @@ -0,0 +1,3 @@ +module zacksolutions.dev + +go 1.27.1 diff --git a/networkingHTTP/cmd/server/http-sv.go b/networkingHTTP/cmd/server/http-sv.go new file mode 100644 index 0000000..85588b0 --- /dev/null +++ b/networkingHTTP/cmd/server/http-sv.go @@ -0,0 +1,16 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +func handler(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello! This is from %s\n", r.URL.Path[1:]) +} + +func main() { + http.HandleFunc("/", handler) + log.Fatal(http.ListenAndServe(":9090", nil)) +} diff --git a/networkingHTTP/cmd/templ/go.mod b/networkingHTTP/cmd/templ/go.mod new file mode 100644 index 0000000..a368669 --- /dev/null +++ b/networkingHTTP/cmd/templ/go.mod @@ -0,0 +1,3 @@ +module zacksolutions.dev/templ + +go 1.27.1 diff --git a/networkingHTTP/cmd/templ/http-tp.go b/networkingHTTP/cmd/templ/http-tp.go new file mode 100644 index 0000000..ff6b579 --- /dev/null +++ b/networkingHTTP/cmd/templ/http-tp.go @@ -0,0 +1,53 @@ +package main + +import ( + "encoding/json" + "html/template" + "log" + "net/http" +) + +type todo struct { + UserID int `json:"userId"` + ID int `json:"id"` + Title string `json:"title"` + Completed bool `json:"completed"` +} + +var form = ` +

Todo #{{.ID}}

+
{{printf "User %d" .UserID}}
+
{{printf "%s (status: %t)" .Title .Completed}}
+ ` + +func handler(w http.ResponseWriter, r *http.Request) { + const base = "https://jsonplaceholder.typicode.com/" + resp, err := http.Get(base + r.URL.Path[1:]) + if err != nil { + http.Error(w, err.Error(), http.StatusServiceUnavailable) + return + } + + defer resp.Body.Close() + + var item todo + + if err = json.NewDecoder(resp.Body).Decode(&item); err != nil { + http.Error(w, err.Error(), http.StatusServiceUnavailable) + return + } + tmpl, err := template.New("Mine").Parse(form) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if err := tmpl.Execute(w, item); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } +} + +func main() { + http.HandleFunc("/", handler) + log.Fatal(http.ListenAndServe(":9090", nil)) +}