Lingara Lingara 문서 학습 가이드 API 라이브러리 앱 만들기 웹 앱
언어: 한국어

Go

이 페이지는 영어에서 번역되었습니다. 두 내용이 다를 경우 영어 페이지가 정확합니다. 영어 페이지 읽기

Go 라이브러리는 lingara 패키지이며, 모듈 github.com/Spinning-Cat-Studios/lingara_api_clients/go에 들어 있습니다. Go 1.23 이상이 필요하며 표준 라이브러리만 사용합니다.

사용 방식

  • 모든 호출은 첫 번째 인자로 context.Context를 받습니다. 컨텍스트를 취소하면 호출도 취소됩니다. 돌려받는 오류는 컨텍스트 자체의 오류이므로 errors.Is(err, context.Canceled)가 동작합니다.
  • 호출은 동기식입니다. 여러 호출을 동시에 실행하려면 고루틴에서 실행하세요. 하나의 클라이언트는 안전하게 공유할 수 있습니다.
  • 스트림은 for ev, err := range s.Events()로 읽고, 각 이벤트는 타입 스위치로 구분합니다. 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.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)
}

이 페이지가 감싸는 것