Go
Ukurasa huu umetafsiriwa kutoka Kiingereza. Ikiwa hizi mbili zinatofautiana, ukurasa wa Kiingereza ndio sahihi. Soma ukurasa wa Kiingereza
Maktaba ya Go ni kifurushi cha lingara katika moduli github.com/Spinning-Cat-Studios/lingara_api_clients/go. Inahitaji Go 1.23 au toleo jipya zaidi na hutumia maktaba ya kawaida pekee.
Jinsi inavyotumika
- Kila mwito hupokea
context.Contextkwanza. Ghairi muktadha ili kughairi mwito; hitilafu unayorudishiwa ni ya muktadha wenyewe, kwa hivyoerrors.Is(err, context.Canceled)inafanya kazi. - Miito inasawazishwa. Iendeshe ndani ya goroutine unapotaka kadhaa kwa wakati mmoja; mteja mmoja ni salama kushirikiwa.
- Mtiririko husomwa kwa
for ev, err := range s.Events(), na kila tukio hulinganishwa kwa type switch. Uufunge kwadefer s.Close(). - Hitilafu ni aina nne zinazoshiriki kiolesura cha
lingara.Error. Tumiaerrors.Askufikia mojawapo;RetryAfterninilwakati API haikutaja muda wa kusubiri. - Chaguo ni za kitendakazi: pitisha
lingara.WithHTTPClientili kutumiahttp.Clientyako mwenyewe. KishaTimeoutyake huweka kikomo kwa kila mwito, ikiwemo mitiririko.
Sampuli zilizo hapa chini husakinisha moduli, huunda mteja, hutiririsha orodha ya msamiati na hushughulikia hitilafu.
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)
}