Lingara Lingara Documentation Guides API Bibliothèques Applications Créer Application web
Langue: Français

Go

Cette page est traduite de l'anglais. En cas de différence, la page anglaise fait foi. Lire la page en anglais

La bibliothèque Go est le paquet lingara du module github.com/Spinning-Cat-Studios/lingara_api_clients/go. Elle nécessite Go 1.23 ou version ultérieure et n’utilise que la bibliothèque standard.

À quoi elle ressemble

  • Chaque appel prend d’abord un context.Context. Annulez le contexte pour annuler l’appel ; l’erreur renvoyée est celle du contexte lui-même, donc errors.Is(err, context.Canceled) fonctionne.
  • Les appels sont synchrones. Exécutez-les dans des goroutines si vous en voulez plusieurs à la fois ; un même client peut être partagé en toute sécurité.
  • Un flux se lit avec for ev, err := range s.Events(), et chaque événement est identifié par un type switch. Fermez-le avec defer s.Close().
  • Les erreurs sont quatre types qui partagent l’interface lingara.Error. Utilisez errors.As pour atteindre l’un d’eux ; RetryAfter vaut nil quand l’API n’a indiqué aucun délai.
  • Les options sont fonctionnelles : passez lingara.WithHTTPClient pour utiliser votre propre http.Client. Son Timeout limite alors chaque appel, flux compris.

Les exemples ci-dessous installent le module, créent un client, diffusent une liste de vocabulaire et gèrent une erreur.

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)
}

Ce que cette page encapsule