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, sodasserrors.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 mitdefer s.Close(). - Fehler sind vier Typen, die sich das Interface
lingara.Errorteilen. Verwenden Sieerrors.As, um an einen davon zu gelangen;RetryAfteristnil, wenn die API keine Wartezeit genannt hat. - Optionen sind funktional: Übergeben Sie
lingara.WithHTTPClient, um Ihren eigenenhttp.Clientzu verwenden. DessenTimeoutbegrenzt 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.6Go
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)
}