Docs · SDK · Go

Go SDK.

Pure Go, zero C dependencies. Module path github.com/RelayOne/coderadar/sdks/go/coderadar. Goroutine-safe, defer-friendly.

Install

go get github.com/RelayOne/coderadar/sdks/go/coderadar

Init

package main

import (
    "context"
    "net/http"
    "os"
    "github.com/RelayOne/coderadar/sdks/go/coderadar"
)

func main() {
    client, err := coderadar.NewClient(coderadar.Config{
        DSN:                os.Getenv("CODERADAR_DSN"),
        Project:            "relaygate",
        Environment:        os.Getenv("ENV"),
        Release:            os.Getenv("RELEASE_SHA"),
        SampleRate:         1.0,
        TracesSampleRate:   0.2,
        Debug:              false,
        BeforeSend:         func(ev *coderadar.Event) *coderadar.Event { return ev },
    })
    if err != nil {
        panic(err)
    }
    defer client.Flush(context.Background())

    handler := coderadar.WrapHandler(yourMux, client)
    http.ListenAndServe(":8080", handler)
}

chi

import (
    "github.com/go-chi/chi/v5"
    chimid "github.com/RelayOne/coderadar/sdks/go/coderadar/chimid"
)

r := chi.NewRouter()
r.Use(chimid.Middleware(client))

gin

import (
    "github.com/gin-gonic/gin"
    crgin "github.com/RelayOne/coderadar/sdks/go/coderadar/gin"
)

r := gin.Default()
r.Use(crgin.Middleware(client))

echo

import (
    crecho "github.com/RelayOne/coderadar/sdks/go/coderadar/echo"
)

e := echo.New()
e.Use(crecho.Middleware(client))

Manual capture

// from anywhere
client.CaptureException(err, &coderadar.EventOpts{
    Tags: map[string]string{"region": "us-central1"},
})

client.CaptureMessage("background job complete", coderadar.LevelInfo)

// scoped tags / user (via context)
ctx = coderadar.WithUser(ctx, &coderadar.User{ID: u.ID})
ctx = coderadar.WithTag(ctx, "tenant", "acme")

// recover from panics manually
defer func() {
    if r := recover(); r != nil {
        client.CaptureException(fmt.Errorf("panic: %v", r), nil)
        panic(r) // re-throw if you want
    }
}()

OpenTelemetry exporter

// drop-in OTLP traces exporter that ships to coderadar's /v1/traces
import "github.com/RelayOne/coderadar/sdks/go/coderadar/otel"

exporter := otel.NewTraceExporter(client)
tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter))
otel.SetTracerProvider(tp)

Notes

  • The client is goroutine-safe; share one across the process.
  • client.Flush(ctx) on shutdown — typically inside signal.NotifyContext teardown.
  • Events are buffered up to 1 MB or 5 seconds before shipping.
  • tracing package interop: see .../coderadar/otelbridge.