Net/http server: too many open files error

I’m trying to develop a simple job queue server with some worker that query it but I encountered a problem with my net/http server. I’m surely doing something bad but after ~3 minutes my server start displaying :

http: Accept error: accept tcp [::]:4200: accept4: too many open files; retrying in 1s

For information it receive 10 request per second in my test case.

Here’s two files to reproduce this error :

// server.go
package main

import (
    "net/http"
)

func main() {
    http.HandleFunc("/get", func(rw http.ResponseWriter, r *http.Request) {
        http.Error(rw, "Try again", http.StatusInternalServerError)
    })
    http.ListenAndServe(":4200", nil)
}

// worker.go
package main

import (
    "net/http"
    "time"
)

func main() {
    for {
        res, _ := http.Get("http://localhost:4200/get")
        defer res.Body.Close()

        if res.StatusCode == http.StatusInternalServerError {
            time.Sleep(100 * time.Millisecond)
            continue
        }

        return
    }
}

I already done some search about this error and I found some interesting response but none of these fixed my issue.

The first response I saw was to correctly close the Body in the http.Get response, as you can see I did it.

The second response was to change the file descriptor ulimit of my system but as I will not control where my app will run I prefer to not use this solution (But for information it’s set at 1024 on my system)

Can someone explain me why this problem happen and how I can fix it in my code ?

Thanks a lot for your time

EDIT : Asked by comment

EDIT 2 : In comment Martin says that I’m not closing the Body, I tried to close it (without defer so) and it fixed the issue. Thanks Martin ! I was thinking that continue will execute my defer, I was wrong.