`net/http` - HTTP Client & Server Implementations

The net/http package provides HTTP client and server implementations. It's a foundational package for building web applications and interacting with HTTP services in Go.

Key Concepts

Client

The http.Client type is used to send HTTP requests. It provides control over aspects like timeouts, redirects, and connection pooling.

Example: Making a GET Request

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    resp, err := http.Get("https://example.com")
    if err != nil {
        fmt.Printf("Error making GET request: %v\n", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("Error reading response body: %v\n", err)
        return
    }

    fmt.Printf("Status Code: %d\n", resp.StatusCode)
    fmt.Printf("Response Body: %s\n", body)
}

Server

The http.Server type allows you to build and run your own HTTP servers. You define request handlers to process incoming requests.

Example: Simple HTTP Server

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %s!", r.URL.Path)
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server starting on :8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        fmt.Printf("Server error: %v\n", err)
    }
}

Request and Response

The http.Request and http.Response types represent the messages exchanged between client and server. They contain crucial information like headers, body, method, and status code.

http.Request Fields
  • Method: The HTTP method (GET, POST, etc.).
  • URL: The requested URL.
  • Header: Request headers.
  • Body: The request body.
  • RemoteAddr: The remote address that sent the request.
http.Response Fields
  • StatusCode: The HTTP status code (200 OK, 404 Not Found, etc.).
  • Status: The HTTP status text.
  • Header: Response headers.
  • Body: The response body.
  • Request: The request that triggered this response.

Handlers

An http.Handler is an interface that defines a way to serve HTTP requests. The most common implementation is using functions via http.HandleFunc, which registers a function to a specific URL path.

Common Usage Patterns

For more detailed information, explore the links in the sidebar.