Go
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم فرق داشته باشند، صفحهٔ انگلیسی درست است. صفحهٔ انگلیسی را بخوانید
کتابخانه Go همان بسته lingara در ماژول github.com/Spinning-Cat-Studios/lingara_api_clients/go است. به Go 1.23 یا بالاتر ضرورت دارد و تنها از کتابخانه معیاری استفاده میکند.
در عمل چطور است
- هر فراخوانی اول یک
context.Contextمیگیرد. برای لغو فراخوانی، context را لغو کنید؛ خطایی که برمیگردد خطای خود context است، پسerrors.Is(err, context.Canceled)کار میکند. - فراخوانیها همگام هستند. وقتی چند فراخوانی را یکجا میخواهید، آنها را در goroutine اجرا کنید؛ شریک ساختن یک کلاینت مصون است.
- جریان با
for ev, err := range s.Events()خوانده میشود و هر رویداد با یک switch روی نوع تطبیق داده میشود. آن را باdefer s.Close()ببندید. - خطاها چهار نوع هستند که رابط
lingara.Errorرا شریک دارند. برای رسیدن به یکی از آنها ازerrors.Asاستفاده کنید؛ وقتی API مدت انتظاری نگفته باشد،RetryAfterبرابرnilاست. - گزینهها تابعی هستند:
lingara.WithHTTPClientرا بدهید تا ازhttp.Clientخودتان استفاده شود. آنگاهTimeoutآن هر فراخوانی، به شمول جریانها، را محدود میکند.
نمونههای پایین ماژول را نصب میکنند، یک کلاینت میسازند، لستی از لغات را جریانی دریافت میکنند و یک خطا را رسیدگی میکنند.
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)
}