|
V předchozím příkladu jsme se podívali na vytvoření
jednoduchého HTTP serveru. HTTP servery
se hodí pro ukázku použití |
![]()
package main
|
import (
"fmt"
"net/http"
"time"
)
|
|
func hello(w http.ResponseWriter, req *http.Request) {
|
|
|
|
ctx := req.Context()
fmt.Println("server: hello handler nastartoval")
defer fmt.Println("server: hello handler skončil")
|
|
Před odesláním odpovědi klientovi počkáme několik
sekund. To může simulovat nějakou práci, kterou
server dělá. Během práce sledujeme kanál |
select {
case <-time.After(10 * time.Second):
fmt.Fprintf(w, "hello\n")
case <-ctx.Done():
|
|
Metoda |
err := ctx.Err()
fmt.Println("server:", err)
internalError := http.StatusInternalServerError
http.Error(w, err.Error(), internalError)
}
}
|
func main() {
|
|
|
Stejně jako předtím zaregistrujeme náš handler na cestu “/hello” a spustíme server. |
http.HandleFunc("/hello", hello)
http.ListenAndServe(":8090", nil)
}
|
|
Spustí server na pozadí. |
$ go run context.go &
|
|
Nasimulujeme požadavek klienta na |
$ curl localhost:8090/hello
server: hello handler nastartoval
^C
server: context canceled
server: hello handler skončil
|
Další příklad: Vytváření podprocesů.