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.