title: How to disable HTTP/2 using Server.TLSNextProto
body: <p>I have a Go server handling https requests:</p>
  
  <pre><code>package main
  import (
          "fmt"
          "net/http"
          "log"
  )
  const (
          port       = "5966"
          cert       = "/tmp/cert.pem"
          key        = "/tmp/key.pem"
  )
  func main() {
  
          listen_at := ":" + port
          fmt.Println("Listening at", listen_at)
          go http.HandleFunc("/job_handler/", job_handler)
          log.Fatal(http.ListenAndServeTLS(listen_at, cert, key, nil))
  }
  func job_handler(w http.ResponseWriter, r *http.Request) {
         // do somework
  }
  </code></pre>
  
  <p>Turns out in https mode, Go has transparent support for the HTTP/2 protocol. We've some clients that noticeably misbehave in HTTP/2, and hence we need to disable HTTP/2 on the server side.</p>
  
  <p>Unfortunately, I can't use ENV variable <code>GODEBUG=http2server=0</code> to disable HTTP/2. What's left is <code>Server.TLSNextProto</code> as documented <a href="https://go.googlesource.com/go/+/master/src/net/http/doc.go?autodive=0%2F%2F#81" rel="noreferrer">here</a>. </p>
  
  <p>How can I use <code>Server.TLSNextProto</code> on my server code above to disable https/2?</p>