Lingara Lingara Belgeler Rehberler API Kütüphaneler Uygulamalar Oluştur Web uygulaması
Dil: Türkçe

Go

Bu sayfa İngilizceden çevrilmiştir. İkisi arasında fark varsa İngilizce sayfa doğrudur. İngilizce sayfayı oku

Go kütüphanesi lingara paketidir ve github.com/Spinning-Cat-Studios/lingara_api_clients/go modülünde yer alır. Go 1.23 veya üstünü gerektirir ve yalnızca standart kütüphaneyi kullanır.

Kullanımı nasıldır

  • Her çağrı ilk parametre olarak bir context.Context alır. Çağrıyı iptal etmek için bağlamı iptal edin; geri aldığınız hata bağlamın kendi hatasıdır, bu yüzden errors.Is(err, context.Canceled) çalışır.
  • Çağrılar eşzamanlıdır (senkron). Aynı anda birkaç tane istediğinizde onları goroutine’lerde çalıştırın; tek bir istemci güvenle paylaşılabilir.
  • Bir akış for ev, err := range s.Events() ile okunur ve her olay bir type switch ile eşleştirilir. Onu defer s.Close() ile kapatın.
  • Hatalar, lingara.Error arayüzünü paylaşan dört türdür. Birine ulaşmak için errors.As kullanın; API bir bekleme süresi belirtmediyse RetryAfter değeri nil olur.
  • Seçenekler işlevseldir: lingara.WithHTTPClient geçerek kendi http.Client örneğinizi kullanabilirsiniz. Bu durumda onun Timeout değeri, akışlar dahil her çağrıyı sınırlar.

Aşağıdaki örnekler modülü kurar, bir istemci oluşturur, bir kelime listesini akış hâlinde alır ve bir hatayı işler.

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

Bu sayfanın sarmaladıkları