Skip to content

Instantly share code, notes, and snippets.

@filewalkwithme
Last active February 16, 2024 23:22
Show Gist options
  • Star 30 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save filewalkwithme/24363472e7424bbe7028 to your computer and use it in GitHub Desktop.
Save filewalkwithme/24363472e7424bbe7028 to your computer and use it in GitHub Desktop.
Listening multiple ports on golang http servers (using http.Handler)
package main
import (
"net/http"
)
func main() {
go func() {
http.ListenAndServe(":8001", &fooHandler{})
}()
//the last call is outside goroutine to avoid that program just exit
http.ListenAndServe(":8002", &barHandler{})
}
type fooHandler struct {
}
func (m *fooHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8001: foo "))
}
type barHandler struct {
}
func (m *barHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8002: bar "))
}
@eklitzke
Copy link

eklitzke commented Sep 7, 2016

you are a hero

@brtn
Copy link

brtn commented Sep 25, 2016

Why not just use go http.ListenAndServe(":8001", &fooHandler{}) ?

@rillig
Copy link

rillig commented Mar 5, 2017

With the necessary error handling, the code should look like this:

go func() {
    log.Fatal(http.ListenAndServe(":8080", server))
}()
log.Fatal(http.ListenAndServeTLS(":8443", "server.crt", "server.key", server))

@neonxray
Copy link

@brtn because it allows you to pass data into the handler

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment