From bf47895f402a3fd5824c92192d09cb4c03e9ba15 Mon Sep 17 00:00:00 2001 From: Wilfried OLLIVIER Date: Thu, 24 Mar 2022 11:07:48 +0100 Subject: [PATCH] Add http golang --- src/SUMMARY.md | 1 + src/dev/golang/http.md | 67 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/dev/golang/http.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index afb15ca..aad20fc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -5,6 +5,7 @@ - [Dev](./dev/main.md) - [Golang](./dev/golang/main.md) + - [http](./dev/golang/http.md) - [Packages](./dev/golang/packages.md) - [Testing](./dev/golang/testing.md) - [Elixir](./dev/elixir/main.md) diff --git a/src/dev/golang/http.md b/src/dev/golang/http.md new file mode 100644 index 0000000..37c64da --- /dev/null +++ b/src/dev/golang/http.md @@ -0,0 +1,67 @@ +# http package stuff + +## HTTP Status Code + +Do not use number directly. + +Don't do this + +```golang +w.WriteHeader(404) +``` + +Do this + +```golang +w.WriteHeader(http.StatusNotFound) +``` + +## Error message + +```golang +http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) +``` + +## Flusher + +A [Flusher](https://pkg.go.dev/net/http#Flusher) can be used to allow an HTTP handler to flush buffered data to the client. + +```golang +package main + +import ( + "fmt" + "io" + "net/http" + "time" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + ended := make(chan bool) + f, flushable := w.(http.Flusher) + if flushable { + go func() { + ticker := time.NewTicker(1 * time.Second) + for { + select { + case <-ticker.C: + fmt.Println("debug") + io.WriteString(w, "#") + f.Flush() + case <-ended: + return + case <-r.Context().Done(): + return + } + } + }() + } + time.Sleep(5 * time.Second) + ended <- true + w.Write([]byte("ok")) + }) + + http.ListenAndServe(":8080", nil) +} +```