Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Aplicación web
Idioma: Español

Go

Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés

La biblioteca de Go es el paquete lingara del módulo github.com/Spinning-Cat-Studios/lingara_api_clients/go. Necesita Go 1.23 o posterior y usa únicamente la biblioteca estándar.

Cómo se usa

  • Cada llamada recibe primero un context.Context. Cancela el contexto para cancelar la llamada; el error que recibes es el del propio contexto, así que errors.Is(err, context.Canceled) funciona.
  • Las llamadas son síncronas. Ejecútalas en goroutines cuando quieras varias a la vez; un mismo cliente se puede compartir con seguridad.
  • Un flujo se lee con for ev, err := range s.Events(), y cada evento se distingue con un type switch. Ciérralo con defer s.Close().
  • Los errores son cuatro tipos que comparten la interfaz lingara.Error. Usa errors.As para llegar a uno de ellos; RetryAfter es nil cuando la API no indicó ninguna espera.
  • Las opciones son funcionales: pasa lingara.WithHTTPClient para usar tu propio http.Client. Su Timeout limita entonces cada llamada, flujos incluidos.

Los ejemplos de abajo instalan el módulo, crean un cliente, reciben en flujo una lista de vocabulario y gestionan un error.

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

Qué envuelve esta página