Go
Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles
Ang Go library ay ang package na lingara sa module na github.com/Spinning-Cat-Studios/lingara_api_clients/go. Kailangan nito ang Go 1.23 o mas bago at standard library lamang ang ginagamit nito.
Paano ito gamitin
- Ang bawat tawag ay tumatanggap muna ng
context.Context. Kanselahin ang context para kanselahin ang tawag; ang error na ibinabalik sa iyo ay ang sariling error ng context, kaya gumagana angerrors.Is(err, context.Canceled). - Synchronous ang mga tawag. Patakbuhin ang mga ito sa mga goroutine kapag gusto mo ng ilang sabay-sabay; ligtas na pagsaluhan ang iisang client.
- Binabasa ang stream gamit ang
for ev, err := range s.Events(), at itinutugma ang bawat event gamit ang type switch. Isara ito gamit angdefer s.Close(). - Ang mga error ay apat na type na may iisang interface na
lingara.Error. Gamitin angerrors.Aspara makuha ang isa; angRetryAfteraynilkapag walang itinakdang paghihintay ang API. - Functional ang mga option: ipasa ang
lingara.WithHTTPClientpara gamitin ang sarili monghttp.Client. AngTimeoutnito ang maglilimita sa bawat tawag, kasama ang mga stream.
Ini-install ng mga halimbawa sa ibaba ang module, gumagawa ng client, nag-i-stream ng listahan ng bokabularyo at humahawak ng error.
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)
}