Lingara Lingara مستندات رهنماها API کتابخانه‌ها اپلیکیشن‌ها ساختن اپلیکیشن وب
زبان: دری

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

آنچه این صفحه دربر می‌گیرد