Moonborn — Developers
Go
Moonborn'un resmi Go SDK'sı. Idiomatic, context-aware client; API'nin bir release gerisinde.
Go SDK github.com/moon-born/sdk-go'da yaşar. Kanonik OpenAPI
spec'inden generate edilir, Go için idiomatic: context-first
method'lar, tipli error'lar, kaputun altında standart net/http.
Release cadence: her API release'inden bir hafta içinde gönderir.
go.mod'unu hedeflediğin API version'una pin'le.
Kur
go get github.com/moon-born/sdk-goİlk çağrı
package main
import (
"context"
"fmt"
"os"
"github.com/moon-born/sdk-go/moonborn"
)
func main() {
client := moonborn.NewClient(moonborn.Options{
ApiKey: os.Getenv("MOONBORN_API_KEY"),
})
ctx := context.Background()
persona, err := client.Personas.CreatePersona(ctx, moonborn.CreatePersonaInput{
Intent: "İstanbul'dan 34 yaşında bir kurucu. Parlak ama huzursuz.",
WorkspaceID: "ws_...",
})
if err != nil {
panic(err)
}
fmt.Println(persona.ID, persona.Status)
}Streaming chat
stream, err := client.Chat.StreamMessage(ctx, moonborn.StreamMessageInput{
SessionID: session.ID,
Content: "Sessiz bir gerçek söyle.",
})
if err != nil { /* ... */ }
defer stream.Close()
for chunk := range stream.Events() {
switch chunk.Type {
case moonborn.ChunkTypeToken:
fmt.Print(chunk.Delta)
case moonborn.ChunkTypeCompleted:
fmt.Printf("\ndrift: %.2f\n", chunk.DriftScore)
}
}Error handling
_, err := client.Personas.GetPersona(ctx, moonborn.GetPersonaInput{ID: "persona_..."})
if apiErr, ok := err.(*moonborn.APIError); ok {
switch apiErr.Code {
case "rate_limited":
// apiErr.RetryAfter'dan sonra retry
case "not_found":
// ...
}
}Client 5xx + 429'da exponential backoff'la auto-retry yapar (30s'de
cap'li). Options.RetryConfig üzerinden konfigüre et.
Idempotency
Write metodları (Create*, Fork*, Refine*) default'ta bir
idempotency key auto-generate eder. Çağrı başı opsiyonlardan override:
persona, err := client.Personas.CreatePersona(ctx, input, moonborn.WithIdempotencyKey("my-key-123"))Tarif
Her Go SDK her tier'da çalışır — feature gate'leri sunucu tarafında enforce edilir.