Shoulder.dev Logo Shoulder.dev

Your advanced code editor is loading.

Please wait a moment.

Explanation

The code sets up a basic HTTP server using the Gorilla Mux router and implements a simple “Hello, World!” endpoint. Here’s a breakdown:

Initialization and Routing:

  • r := mux.NewRouter(): Creates a new Gorilla Mux router for handling HTTP requests.
  • r.HandleFunc("/", HelloWorld).Methods("GET"): Defines a route handler for the root path (“/”) that only responds to GET requests. The HelloWorld function is called to handle the request.

Server Setup:

  • server := &http.Server{...}: Creates an http.Server instance with:
  • Addr: ":8080": Sets the server to listen on port 8080.
  • Handler: r: Assigns the Gorilla Mux router as the handler for all incoming requests.
  • ReadTimeout, WriteTimeout, IdleTimeout: Configures timeouts for reading, writing, and idle connections.

Starting the Server:

  • go func() { ... }(): Starts a goroutine to run the server asynchronously.
  • fmt.Println("Server started at :8080"): Prints a message indicating the server is running.
  • if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {...}: Starts listening for incoming requests. If an error occurs, it logs the error and exits the program.

Graceful Shutdown:

  • c := make(chan os.Signal, 1): Creates a channel to receive signals from the operating system.
  • signal.Notify(c, os.Interrupt): Registers the channel to receive interrupt signals (typically Ctrl+C).
  • <-c: Blocks until an interrupt signal is received.
  • ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second): Creates a context with a 15-second timeout to allow for graceful shutdown.
  • defer cancel(): Ensures the context is canceled after the shutdown process.
  • server.Shutdown(ctx): Gracefully shuts down the server, allowing existing connections to finish.
  • log.Println("shutting down"): Logs a message indicating the server is shutting down.
  • os.Exit(0): Exits the program successfully.

HelloWorld Handler:

  • func HelloWorld(w http.ResponseWriter, r *http.Request) {}: This function handles the request to the root path.
  • w.WriteHeader(http.StatusOK): Sets the HTTP status code to 200 (OK).
  • w.Write([]byte("Hello, World!")): Writes the “Hello, World!” message to the response body.

Summary:

This code provides a simple HTTP server that serves a basic “Hello, World!” endpoint. It uses Goroutines for asynchronous server operation and proper error handling. The graceful shutdown mechanism ensures that existing connections are handled before the server exits.