package main import ( "encoding/json" "fmt" "log" "net/http" "os" "time" "github.com/gorilla/mux" ) var req int var messages = make(chan interface{}, 10) func main() { for i := 0; i < 4; i++ { go worker(messages, i+1) } r := mux.NewRouter() r.HandleFunc("/", rootHandler) port := os.Getenv("PORT") if port == "" { port = "8080" } fmt.Println("starting golang server at port:", port) err := http.ListenAndServe("0.0.0.0:"+port, r) if err != nil { log.Fatal("Something went wrong starting the server", err) } } type Person struct { Name string `json:"name"` Purpose string `json:"purpose"` } func rootHandler(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() x := Person{ Name: "tawsif", Purpose: "testing do app platform", } bt, err := json.Marshal(x) if err != nil { fmt.Println("json marshal error", err.Error()) } // req++ // go func(reqx int) { // for i := 0; i < 500; i++ { // messages <- fmt.Sprintf("Task: %d of req %d", i, reqx) // } // }(req) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) w.Write(bt) } func worker(c chan interface{}, workerNo int) { fmt.Println("worker:", workerNo, " Ready") for { time.Sleep(time.Millisecond * 20) fmt.Println("worker:", workerNo, " received ", <-c) } }