Go
Hierdie bladsy is uit Engels vertaal. As die twee verskil, is die Engelse bladsy korrek. Lees die Engelse bladsy
Die Go-biblioteek is die lingara-pakket in die module github.com/Spinning-Cat-Studios/lingara_api_clients/go. Dit vereis Go 1.23 of later en gebruik net die standaardbiblioteek.
Hoe dit lees
- Elke oproep neem eerste ‘n
context.Context. Kanselleer die konteks om die oproep te kanselleer; die fout wat jy terugkry, is die konteks s’n, soerrors.Is(err, context.Canceled)werk. - Oproepe is sinchronies. Laat hulle in goroutines loop wanneer jy verskeie gelyktydig wil hê; een kliënt kan veilig gedeel word.
- ‘n Stroom word gelees met
for ev, err := range s.Events(), en elke gebeurtenis word met ‘n type switch gepas. Sluit dit metdefer s.Close(). - Foute is vier tipes wat die
lingara.Error-koppelvlak deel. Gebruikerrors.Asom een te bereik;RetryAfterisnilwanneer die API geen wagtyd genoem het nie. - Opsies is funksioneel: gee
lingara.WithHTTPClientdeur om jou eiehttp.Clientte gebruik. SyTimeoutbegrens dan elke oproep, strome ingesluit.
Die voorbeelde hieronder installeer die module, skep ‘n kliënt, stroom ‘n woordelys en hanteer ‘n fout.
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)
}