Middleware-style helper code can add headers around a handler result.

Middleware Headers

middleware_headers.go
package main

import "fmt"

type reply struct {
	Status  int
	Body    string
	Headers map[string]string
}

func addRequestID(res reply, requestID string) reply {
	res.Headers["X-Request-ID"] = requestID
	return res
}

func main() {
	var requestID = 
	res := reply{Status: 200, Body: "ok", Headers: map[string]string{}}
	res = addRequestID(res, requestID)

	fmt.Println("status=", res.Status)
	fmt.Println("body=", res.Body)
	fmt.Println("requestID=", res.Headers["X-Request-ID"])
}
package main

import "fmt"

type reply struct {
	Status  int
	Body    string
	Headers map[string]string
}

func addRequestID(res reply, requestID string) reply {
	res.Headers["X-Request-ID"] = requestID
	return res
}

func main() {
	var requestID = 
	res := reply{Status: 200, Body: "ok", Headers: map[string]string{}}
	res = addRequestID(res, requestID)

	fmt.Println("status=", res.Status)
	fmt.Println("body=", res.Body)
	fmt.Println("requestID=", res.Headers["X-Request-ID"])
}
package main

import "fmt"

type reply struct {
	Status  int
	Body    string
	Headers map[string]string
}

func addRequestID(res reply, requestID string) reply {
	res.Headers["X-Request-ID"] = requestID
	return res
}

func main() {
	var requestID = 
	res := reply{Status: 200, Body: "ok", Headers: map[string]string{}}
	res = addRequestID(res, requestID)

	fmt.Println("status=", res.Status)
	fmt.Println("body=", res.Body)
	fmt.Println("requestID=", res.Headers["X-Request-ID"])
}
middleware Middleware wraps handler logic so shared behavior, such as headers, stays in one place.