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, duserrors.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 metdefer s.Close(). - Fouten zijn vier typen die de interface
lingara.Errordelen. Gebruikerrors.Asom er een te bereiken;RetryAfterisnilwanneer de API geen wachttijd noemde. - Opties zijn functioneel: geef
lingara.WithHTTPClientmee om je eigenhttp.Clientte gebruiken. ZijnTimeoutbegrenst 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.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)
}