Go
यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें
Go लाइब्रेरी lingara पैकेज है, जो मॉड्यूल github.com/Spinning-Cat-Studios/lingara_api_clients/go में मौजूद है। इसके लिए Go 1.23 या उसके बाद का संस्करण चाहिए और यह केवल स्टैंडर्ड लाइब्रेरी का उपयोग करती है।
इसे कैसे इस्तेमाल करें
- हर कॉल सबसे पहले एक
context.Contextलेती है। कॉल रद्द करने के लिए context रद्द करें; आपको जो एरर मिलता है वह context का अपना होता है, इसलिएerrors.Is(err, context.Canceled)काम करता है। - कॉल सिंक्रोनस होती हैं। जब आप एक साथ कई कॉल चाहें, तो उन्हें goroutines में चलाएँ; एक क्लाइंट को साझा करना सुरक्षित है।
- स्ट्रीम को
for ev, err := range s.Events()से पढ़ा जाता है, और हर इवेंट को type 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.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)
}