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

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