Go
Αυτή η σελίδα έχει μεταφραστεί από τα αγγλικά. Αν οι δύο διαφέρουν, η αγγλική σελίδα είναι η σωστή. Διαβάστε την αγγλική σελίδα
Η βιβλιοθήκη για Go είναι το πακέτο lingara στο module github.com/Spinning-Cat-Studios/lingara_api_clients/go. Απαιτεί Go 1.23 ή νεότερο και χρησιμοποιεί μόνο την τυπική βιβλιοθήκη.
Πώς διαβάζεται
- Κάθε κλήση δέχεται πρώτα ένα
context.Context. Ακυρώστε το context για να ακυρώσετε την κλήση· το σφάλμα που λαμβάνετε είναι αυτό του ίδιου του context, οπότε τοerrors.Is(err, context.Canceled)λειτουργεί. - Οι κλήσεις είναι σύγχρονες. Εκτελέστε τες σε goroutines όταν θέλετε πολλές ταυτόχρονα· ένας client μπορεί να μοιράζεται με ασφάλεια.
- Μια ροή διαβάζεται με
for ev, err := range s.Events(), και κάθε συμβάν αντιστοιχίζεται με ένα type switch. Κλείστε την μεdefer s.Close(). - Τα σφάλματα είναι τέσσερις τύποι που μοιράζονται το interface
lingara.Error. Χρησιμοποιήστεerrors.Asγια να φτάσετε σε έναν· τοRetryAfterείναιnilόταν το API δεν όρισε αναμονή. - Οι επιλογές είναι συναρτησιακές: περάστε
lingara.WithHTTPClientγια να χρησιμοποιήσετε το δικό σαςhttp.Client. ΤοTimeoutτου περιορίζει τότε κάθε κλήση, συμπεριλαμβανομένων των ροών.
Τα παρακάτω δείγματα εγκαθιστούν το module, δημιουργούν έναν client, μεταδίδουν σε ροή μια λίστα λεξιλογίου και χειρίζονται ένα σφάλμα.
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)
}