I wanted to test the performance of concurrent http request in Go against node.js:
package main
import (
"fmt"
"time"
"strconv"
"net/http"
)
var responseCounter = 0
var requestCounter = 0
var count=0
var ch = make(chan int)
func sendRequest(){
go func() {
requestCounter++
url := "https://www.google.co.in/#q=search_" +strconv.Itoa(requestCounter)
resp, err := http.Get(url)
if err != nil {
fmt.Printf("\nError",err)
}
defer resp.Body.Close()
count++
ch <- count
sendRequest()
}()
}
func main() {
for i := 1; i<100; i++{
sendRequest()
}
for {
select {
case r := <-ch:
fmt.Printf("\nChannel ",r)
case <-time.After(50 * time.Millisecond):
//sendRequest()
}
}
}
When I run this code the CPU usage goes very high (around 90%). Is there something wrong with this code? Have I used the Goroutines correctly?
sendRequest
, no? \$\endgroup\$go {build,install,run,test} -race
is your friend). \$\endgroup\$