Lingara Lingara Documentatie Gidsen API Bibliotheken Apps Bouwen Webapp
Taal: Nederlands

Go

Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina

De Go-bibliotheek is het pakket lingara in de module github.com/Spinning-Cat-Studios/lingara_api_clients/go. Ze vereist Go 1.23 of hoger en gebruikt alleen de standaardbibliotheek.

Hoe het leest

  • Elke aanroep neemt eerst een context.Context. Annuleer de context om de aanroep te annuleren; de fout die je terugkrijgt is die van de context zelf, dus errors.Is(err, context.Canceled) werkt.
  • Aanroepen zijn synchroon. Voer ze uit in goroutines als je er meerdere tegelijk wilt; één client kun je veilig delen.
  • Een stream lees je met for ev, err := range s.Events(), en elk event match je met een type switch. Sluit hem met defer s.Close().
  • Fouten zijn vier typen die de interface lingara.Error delen. Gebruik errors.As om er een te bereiken; RetryAfter is nil wanneer de API geen wachttijd noemde.
  • Opties zijn functioneel: geef lingara.WithHTTPClient mee om je eigen http.Client te gebruiken. Zijn Timeout begrenst dan elke aanroep, streams inbegrepen.

De voorbeelden hieronder installeren de module, maken een client aan, streamen een woordenlijst en handelen een fout af.

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

Wat deze pagina omvat