Skip to content

Instantly share code, notes, and snippets.

@klrkdekira
Created August 22, 2016 08:22
Show Gist options
  • Save klrkdekira/7e3cd2a39637a21b673bb50e2015714b to your computer and use it in GitHub Desktop.
Save klrkdekira/7e3cd2a39637a21b673bb50e2015714b to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
server := &http.Server{
Addr: ":9090",
}
// First handler
server.Handler = createHandler("Hello, World!")
// Starts webserver in background
go func() {
if err := server.ListenAndServe(); err != nil {
log.Fatal(err)
}
}()
fmt.Println("Started web server")
// Our request
req, err := http.NewRequest("GET", "http://127.0.0.1:9090/", nil)
if err != nil {
log.Fatal(err)
}
req.Close = true
fmt.Println("Calling once")
resp, err := lookup(req)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Received response, %s\n", resp)
server.Handler = createHandler("Foo, Bar!")
fmt.Println("Switched server handler")
resp, err = lookup(req)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Received response, %s\n", resp)
fmt.Println("All done! Exited")
}
func lookup(req *http.Request) ([]byte, error) {
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
}
func createHandler(msg string) http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(msg))
})
return mux
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment