func newContextWithParentID(ctx context.Context, id string) context.Context {
	return context.WithValue(ctx, parentIDKey, id)
}
Define some wrappers to propagate "parent" identifiers down the call stack,
for defining relationships between spans within a trace.
package main
import (
	"context"
	"fmt"
	"html/template"
	"io/ioutil"
	"log"
	"math/rand"
	"net/http"
	"os"
	"regexp"
	"time"
	"github.com/honeycombio/libhoney-go"
)
type key int
const (
	requestIDKey key = 0
	parentIDKey  key = 1
)
func newContextWithRequestID(ctx context.Context, req *http.Request) context.Context {
	reqID := req.Header.Get("X-Request-ID")
	if reqID == "" {
		reqID = newID()
	}
	return context.WithValue(ctx, requestIDKey, reqID)
}
func requestIDFromContext(ctx context.Context) string {
	return ctx.Value(requestIDKey).(string)
}