Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Go 도구

이 가이드는 adder/world.wit 패키지에 정의된 adder 월드를 구현하는 Go 컴포넌트를 빌드하는 과정을 안내합니다. 이 컴포넌트는 add 함수가 있는 add 인터페이스를 포함하는 adder 월드를 구현합니다.

이 내용은 기본적인 소개라는 점에 유의하십시오. 더 많은 예제는 componentize-go 저장소의 예제를 참조하십시오.

그래도 궁금한 점이 있으면 Zulip에서 componentize-go 메인테이너에게 언제든지 문의하거나 저장소에 이슈를 등록하십시오.

1. 도구 설치

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 컴포넌트를 성공적으로 빌드하고 실행했습니다 🎉


원문 © 2023 The Bytecode Alliance Contributors · WebAssembly Components Documentation · CC BY 4.0
Yeokja 한국어 번역·편집 · Anthropic 사의 claude-sonnet-5 모델을 활용하여 번역되었으며 학습을 모두 비허용한 상태로 작업하였습니다 · 이 번역은 원문을 수정한 문서이며 CC BY 4.0으로 제공합니다.