Lingara Lingara Dokumentation Ratgeber API Bibliotheken Apps Erstellen Web-App
Sprache: Deutsch

Go

Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen

Die Go-Bibliothek ist das Paket lingara im Modul github.com/Spinning-Cat-Studios/lingara_api_clients/go. Sie benötigt Go 1.23 oder neuer und verwendet ausschließlich die Standardbibliothek.

Wie sie sich liest

  • Jeder Aufruf nimmt als Erstes einen context.Context. Brechen Sie den Kontext ab, um den Aufruf abzubrechen; der zurückgegebene Fehler ist der des Kontexts selbst, sodass errors.Is(err, context.Canceled) funktioniert.
  • Aufrufe sind synchron. Führen Sie sie in Goroutinen aus, wenn Sie mehrere gleichzeitig möchten; ein Client kann gefahrlos gemeinsam genutzt werden.
  • Ein Stream wird mit for ev, err := range s.Events() gelesen, und jedes Event wird mit einem Type Switch unterschieden. Schließen Sie ihn mit defer s.Close().
  • Fehler sind vier Typen, die sich das Interface lingara.Error teilen. Verwenden Sie errors.As, um an einen davon zu gelangen; RetryAfter ist nil, wenn die API keine Wartezeit genannt hat.
  • Optionen sind funktional: Übergeben Sie lingara.WithHTTPClient, um Ihren eigenen http.Client zu verwenden. Dessen Timeout begrenzt dann jeden Aufruf, Streams eingeschlossen.

Die folgenden Beispiele installieren das Modul, erstellen einen Client, streamen eine Vokabelliste und behandeln einen Fehler.

Go

go get github.com/Spinning-Cat-Studios/lingara_api_clients/go@v0.1.0-alpha.6

Go

import (
	"os"

	lingara "github.com/Spinning-Cat-Studios/lingara_api_clients/go"
)

client, err := lingara.New(
	lingara.WithClientCredentials(os.Getenv("LINGARA_CLIENT_ID"), os.Getenv("LINGARA_CLIENT_SECRET")),
)
if err != nil {
	return nil, err
}

Go

count := uint8(8)
s, err := client.GenerateVocabulary(ctx, lingara.VocabRequest{Level: 2, SourceLang: "en", TargetLang: "zh", Count: &count})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if item, ok := ev.(lingara.GenerateVocabularyEventItem); ok {
		fmt.Println(item.Data.Word, item.Data.Translation)
	}
}

Go

_, err := client.GetUsage(ctx)
var apiErr *lingara.APIError
var oauthErr *lingara.OAuthError
var maintenance *lingara.MaintenanceError
var transport *lingara.TransportError
switch {
case err == nil:
case errors.As(err, &apiErr):
	// A refusal from the API: Status, Code (stable) and Message (localised).
	fmt.Println(apiErr.Status, apiErr.Code, apiErr.Message)
	if apiErr.RetryAfter != nil {
		fmt.Println("retry after", *apiErr.RetryAfter)
	}
case errors.As(err, &oauthErr):
	// The token endpoint refused the credentials or the scopes.
	fmt.Println(oauthErr.Status, oauthErr.ErrorCode, oauthErr.Description)
case errors.As(err, &maintenance):
	fmt.Println("under maintenance")
	if maintenance.RetryAfter != nil {
		fmt.Println("retry after", *maintenance.RetryAfter)
	}
case errors.As(err, &transport):
	// No usable answer: connect, tls, reset, timeout, and so on.
	fmt.Println("transport:", transport.Kind)
default:
	// ctx was cancelled or timed out: errors.Is(err, context.Canceled).
	fmt.Println(err)
}

Was diese Seite kapselt