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.Contextalı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üzdenerrors.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. Onudefer s.Close()ile kapatın. - Hatalar,
lingara.Errorarayüzünü paylaşan dört türdür. Birine ulaşmak içinerrors.Askullanın; API bir bekleme süresi belirtmediyseRetryAfterdeğerinilolur. - Seçenekler işlevseldir:
lingara.WithHTTPClientgeçerek kendihttp.Clientörneğinizi kullanabilirsiniz. Bu durumda onunTimeoutdeğ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.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)
}