Skip to content

feat: GO언어 바인딩 추가#167

Open
kdyann wants to merge 1 commit into
dev-five-git:mainfrom
kdyann:feature/go-binding
Open

feat: GO언어 바인딩 추가#167
kdyann wants to merge 1 commit into
dev-five-git:mainfrom
kdyann:feature/go-binding

Conversation

@kdyann
Copy link
Copy Markdown

@kdyann kdyann commented Jun 2, 2026

braillify 라이브러리의 기능을 Go 생태계에서 사용할 수 있도록 지원하는 Go 바인딩을 추가합니다.

주요 구성

  • CGo 기반 구현: Rust 코어 엔진의 C ABI를 통해 Go에서 호출할 수 있도록 CGo를 사용하여 바인딩을 구현했습니다.
  • 정적 링크 방식: 플랫폼별로 사전 빌드된 정적 라이브러리(.a)를 패키지에 포함하여, 런타임 동적 로딩 없이 컴파일
    시점에 링크됩니다.
  • 크로스 플랫폼 지원: Windows, Linux, macOS(Intel/ARM) 환경을 지원합니다.
  • 제공 API:
    • Encode(text string) ([]byte, error) — 점자 내부표기 바이트 반환
    • EncodeToUnicode(text string) (string, error) — 점자 유니코드 문자열 반환
    • EncodeToBrailleFont(text string) (string, error) — 점자 폰트용 유니코드 반환
  • 스레드 안전: runtime.LockOSThread를 통한 스레드 바인딩으로 Rust 측 thread-local 에러 처리가 안전하게
    동작합니다.

Package 구조

packages/go/
├── go.mod                  # Go module definition
├── braillify.go            # Public Go API
├── cgo.go                  # CGo bindings
├── braillify_test.go       # Tests
├── Cargo.toml             # Rust FFI crate configuration
├── src/
│   └── lib.rs             # Rust C-ABI wrapper
└── libs/
    ├── windows-amd64/     # Prebuilt static library
    ├── linux-amd64/       # Prebuilt static library
    └── darwin-arm64/      # Prebuilt static library

GitHub Actions (go.yml)

매트릭스 빌드를 통해 Windows, Linux, macOS(ARM) 환경에서 각각:

  1. Rust 타겟으로 정적 라이브러리를 빌드
  2. 빌드된 .a 파일을 libs/ 디렉토리에 복사
  3. go test -v ./... 로 테스트 수행

테스트

추가 논의 필요사항

  • 정적 라이브러리(.a)를 리포지토리에 직접 포함하고 있어, 플랫폼별 바이너리 크기가 약 20MB입니다. GitHub Release
    아티팩트로 분리하거나, 빌드 스크립트로 소스에서 빌드하는 방안도 고려할 수 있습니다.
  • JNI 구현 방식 등 개선이 필요한 부분이 있다면 언제든 피드백 부탁드립니다. 적극적으로 반영하겠습니다.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 2, 2026

Codecov Report

❌ Patch coverage is 0% with 75 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
packages/go/src/lib.rs 0.00% 75 Missing ⚠️
Files with missing lines Coverage Δ
packages/go/src/lib.rs 0.00% <0.00%> (ø)

... and 112 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant