Lingara Lingara المستندات أدلة التعلّم API المكتبات التطبيقات البناء تطبيق الويب
اللغة: العربية

Go

هذه الصفحة مترجمة من الإنجليزية. إذا اختلفت النسختان، فالصفحة الإنجليزية هي الصحيحة. اقرأ الصفحة الإنجليزية

مكتبة Go هي الحزمة lingara في الوحدة github.com/Spinning-Cat-Studios/lingara_api_clients/go. تحتاج إلى Go 1.23 أو أحدث ولا تستخدم سوى المكتبة القياسية.

كيف تبدو في الاستخدام

  • يأخذ كل استدعاء context.Context أولًا. ألغِ السياق لإلغاء الاستدعاء؛ الخطأ الذي يعود إليك هو خطأ السياق نفسه، لذا يعمل errors.Is(err, context.Canceled).
  • الاستدعاءات متزامنة. شغّلها في goroutines عندما تريد عدة استدعاءات في آنٍ واحد؛ ومشاركة عميل واحد آمنة.
  • يُقرأ التدفق باستخدام for ev, err := range s.Events()، ويُطابَق كل حدث بعبارة switch على النوع. أغلقه باستخدام defer s.Close().
  • الأخطاء أربعة أنواع تشترك في الواجهة lingara.Error. استخدم errors.As للوصول إلى أحدها؛ تكون RetryAfter مساوية لـ nil عندما لا يحدد الـ API مدة انتظار.
  • الخيارات وظيفية: مرّر 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)
}

ما تغلّفه هذه الصفحة