Lingara Lingara Documentazione Guide API Librerie App Crea App web
Lingua: Italiano

Go

Questa pagina è tradotta dall'inglese. Se le due versioni differiscono, fa fede la pagina in inglese. Leggi la pagina in inglese

La libreria Go è il pacchetto lingara nel modulo github.com/Spinning-Cat-Studios/lingara_api_clients/go. Richiede Go 1.23 o successivo e usa solo la libreria standard.

Come si usa

  • Ogni chiamata riceve per primo un context.Context. Annulla il contesto per annullare la chiamata; l’errore che ricevi è quello del contesto stesso, quindi errors.Is(err, context.Canceled) funziona.
  • Le chiamate sono sincrone. Eseguile in goroutine quando ne vuoi diverse contemporaneamente; un client può essere condiviso in sicurezza.
  • Uno stream si legge con for ev, err := range s.Events(), e ogni evento si distingue con un type switch. Chiudilo con defer s.Close().
  • Gli errori sono quattro tipi che condividono l’interfaccia lingara.Error. Usa errors.As per raggiungerne uno; RetryAfter è nil quando l’API non ha indicato alcuna attesa.
  • Le opzioni sono funzionali: passa lingara.WithHTTPClient per usare il tuo http.Client. Il suo Timeout limita allora ogni chiamata, stream compresi.

Gli esempi qui sotto installano il modulo, creano un client, ricevono in streaming un elenco di vocaboli e gestiscono un errore.

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

Cosa incapsula questa pagina