code: func (s *HTTPServer) ListenAndServeTLS(certFile, keyFile string) error {
  	addr := s.Server.Addr
  	if addr == "" {
  		addr = ":https"
  	}
  
  	cert, err := tls.LoadX509KeyPair(certFile, keyFile)
  	if err != nil {
  		return err
  	}
  
  	config := &tls.Config{
  		NextProtos:               []string{"h2", "http/1.1"},
  		Certificates:             []tls.Certificate{cert},
  		PreferServerCipherSuites: true,
  		ClientSessionCache:       tls.NewLRUClientSessionCache(0),
  	}
  	s.Server.TLSConfig = config
  
  	ln, err := net.Listen("tcp", addr)
  	if err != nil {
  		return err
  	}
  
  	tlsListener := tls.NewListener(ln, config)
  	return s.Serve(tlsListener)
  }
docs: // ListenAndServeTLS overrides http.Server's method.
  //
  // Unlike the original, this method returns immediately just after
  // starting a goroutine to accept connections.  To stop listening,
  // call the environment's Cancel.
  //
  // Another difference from the original is that certFile and keyFile
  // must be specified.  If not, configure http.Server.TLSConfig
  // manually and use Serve().
  //
  // HTTP/2 is always enabled.
  //
  // ListenAndServeTLS returns non-nil error if net.Listen failed
  // or failed to load certificate files.