Go SDK

github.com/dyogg/dyogg-go — idiomatic Go client, context-aware, minimal deps.

Install

go get github.com/dyogg/dyogg-go

Requires Go 1.21+.

Quick Start

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/dyogg/dyogg-go"
)

func main() {
    client := dyogg.NewClient("dyo_live_...")
    ctx := context.Background()

    player, err := client.Player.Get(ctx, "genshin", "816973814", nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(player.Nickname, player.TrustScore.Tier)
}

Configuration

client := dyogg.NewClient(
    "dyo_live_...",
    dyogg.WithBaseURL("https://api.dyogg.com"),
    dyogg.WithAPIVersion("v1"),
    dyogg.WithTimeout(15 * time.Second),
    dyogg.WithMaxRetries(3),
    dyogg.WithHTTPClient(customClient),
)

Batch

players, err := client.Player.Batch(ctx, &dyogg.PlayerBatchParams{
    Game: "hsr",
    UIDs: []string{"602891308", "602891309"},
})

Error handling

if err != nil {
    var apiErr *dyogg.APIError
    if errors.As(err, &apiErr) {
        if apiErr.Code == "rate_limited" {
            time.Sleep(time.Duration(apiErr.RetryAfterSeconds) * time.Second)
            // retry ...
        }
        log.Printf("api error: %s (request_id=%s)", apiErr.Message, apiErr.RequestID)
    }
    log.Fatal(err)
}

Streaming (ndjson via io.Reader)

stream, err := client.Leaderboard.StreamTop(ctx, &dyogg.LeaderboardStreamParams{
    Game: "hsr", AvatarID: 1308, Limit: 500,
})
if err != nil { log.Fatal(err) }
defer stream.Close()

for stream.Next() {
    entry := stream.Current()
    fmt.Println(entry.Rank, entry.UID, entry.MetricValue)
}
if err := stream.Err(); err != nil { log.Fatal(err) }

Context cancellation

Semua method Go menerima context.Context — cancel dengan cara idiomatic:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

player, err := client.Player.Get(ctx, "genshin", "816973814", nil)

Package dependencies

Minimal — hanya net/http (stdlib) + encoding/json. Tidak ada logging framework, tidak ada glue tambahan.

Roadmap

  • v1.1 — support http/2 push server (experimental).
  • v1.2 — automatic OpenTelemetry span propagation.