Go 도구
이 가이드는 adder/world.wit 패키지에 정의된 adder 월드를 구현하는 Go 컴포넌트를 빌드하는 과정을 안내합니다. 이 컴포넌트는 add 함수가 있는 add 인터페이스를 포함하는 adder 월드를 구현합니다.
이 내용은 기본적인 소개라는 점에 유의하십시오. 더 많은 예제는 componentize-go 저장소의 예제를 참조하십시오.
그래도 궁금한 점이 있으면 Zulip에서 componentize-go 메인테이너에게 언제든지 문의하거나 저장소에 이슈를 등록하십시오.
1. 도구 설치
- Go 1.25.5+
- componentize-go 최신 버전
2. Go 프로젝트 생성
component-docs 저장소를 로컬에 클론한 상태에서 다음을 실행하십시오:
mkdir go-adder && cd go-adder
2. 컴포넌트가 구현할 월드 결정
adder 월드를 구현할 것이므로 WIT를 프로젝트에 복사할 수 있습니다. wit라는 하위 디렉터리를 만들고 wit/adder.wit라는 파일에 다음 코드를 붙여 넣으십시오:
package docs:adder@0.1.0;
interface add {
add: func(x: u32, y: u32) -> u32;
}
world adder {
export add;
}
3. Wasm 컴포넌트용 바인딩 생성
다음 명령을 실행하여 컴포넌트용 바인딩을 생성하십시오:
componentize-go --world adder bindings
go mod tidy
프로젝트 디렉터리는 다음과 같은 구조가 됩니다:
$ tree
.
├── go.mod
├── go.sum
├── wit
│ └── adder.wit
└── wit_exports.go
각 파일의 역할은 다음과 같습니다:
go.mod에는 공유 WIT 타입의 필수 라이브러리가 포함되어 있습니다(go.bytecodealliance.org/pkg 참조)wit_exports.go는 Go WebAssembly 컴파일러를 위한//go:wasmexport메서드를 정의합니다.
이 상태에서 컴파일하려고 하면 wit_exports.go 파일에서 오류가 발생합니다:
could not import wit_component/export_docs_adder_add (no required module provides package "wit_component/export_docs_adder_add")
이 모듈은 다음 섹션에서 만듭니다.
4. add 함수 구현
add 디렉터리에 export_docs_adder_add/exports.go라는 파일을 만들고 다음 코드를 붙여 넣으십시오:
package export_docs_adder_add
func Add(x uint32, y uint32) uint32 {
return x + y
}
5. 컴포넌트 빌드하기
Go 애플리케이션을 WebAssembly로 컴파일하려면 다음 명령을 실행하십시오:
componentize-go build
이 명령은 다음 섹션에서 실행할 main.wasm 파일을 출력합니다.
5. add 컴포넌트 테스트하기
컴포넌트가 제대로 작동하는지 확인하기 위해, adder 월드를 대상으로 하는 컴포넌트를 실행할 수 있는 Rust 애플리케이션에서 이 컴포넌트를 실행해 보겠습니다. Rust 툴체인이 설치되어 있는지 반드시 확인하십시오.
이 애플리케이션은 wasmtime을 사용하여 Rust “호스트”/“임베더” 바인딩을 생성하고, WASI 월드를 가져오며, 컴포넌트를 실행합니다.
go-adder 디렉터리 안에서 다음을 실행하십시오.
$ cd ../component-model/examples/example-host
$ cargo run --release -- 1 2 ../../../go-adder/main.wasm
1 + 2 = 3
이로써 Go로 기본적인 WebAssembly 컴포넌트를 성공적으로 빌드하고 실행했습니다 🎉