Go

Go SDK

Installation

go get github.com/getsentry/sentry-go

Setup

package main

import (
    "log"
    "time"

    "github.com/getsentry/sentry-go"
)

func main() {
    err := sentry.Init(sentry.ClientOptions{
        Dsn:              "https://your-key@your-hostname.tindra.sh/1",
        Environment:      "production",
        Release:          "1.4.2",
        TracesSampleRate: 0.1,
    })
    if err != nil {
        log.Fatalf("sentry.Init: %v", err)
    }
    defer sentry.Flush(2 * time.Second)
}

Call sentry.Flush before your process exits to ensure buffered events are sent.

HTTP middleware

net/http

import "github.com/getsentry/sentry-go/http"

sentryHandler := sentryhttp.New(sentryhttp.Options{
    Repanic: true,
})

http.Handle("/", sentryHandler.Handle(myHandler))

Gin

import sentrygingo "github.com/getsentry/sentry-go/gin"

router := gin.New()
router.Use(sentrygingo.New(sentrygingo.Options{
    Repanic: true,
}))

Echo

import sentryecho "github.com/getsentry/sentry-go/echo"

e := echo.New()
e.Use(sentryecho.New(sentryecho.Options{}))

Manual error capturing

if err != nil {
    sentry.CaptureException(err)
}

Capture a message

sentry.CaptureMessage("User exceeded quota")

User context

sentry.ConfigureScope(func(scope *sentry.Scope) {
    scope.SetUser(sentry.User{
        ID:    userID,
        Email: userEmail,
    })
})

Custom spans

ctx := context.Background()
span := sentry.StartSpan(ctx, "db.query", sentry.WithDescription("Fetch user orders"))
defer span.Finish()

rows, err := db.QueryContext(span.Context(), "SELECT * FROM orders WHERE user_id = $1", userID)

Testing

sentry.CaptureException(fmt.Errorf("hello tindra"))
sentry.Flush(2 * time.Second)

Check your dashboard. The event should appear within a few seconds.