Building Golem Components in Go
Building Golem components written in Go requires a series of steps.
If the project was created with golem-cli new, it already has a Makefile that incorporates all the necessary steps to build the component, so it is enough to run:
$ make buildIn details, building the component requires the following steps:
Generate the Go bindings
Use the wit-bindgen tool to generate the Go bindings from the WIT files:
$ wit-bindgen tiny-go --out-dir go_example ./witCompile the Go code
Using the TinyGo compiler, compile the Go code into a WebAssembly module:
$ tinygo build -target=wasi -tags=purego -o go_example.module.wasm main.goEmbed the WIT files in the WebAssembly module
The following command embeds the WIT files into the WebAssembly module:
$ wasm-tools component embed ./wit go_example.module.wasm --output go_example.embed.wasmPackage the Go code into a WASM component
Finally use wasm-tools to create the WebAssembly component:
$ wasm-tools component new go_example.embed.wasm -o go_example.wasm --adapt adapters/tier1/wasi_snapshot_preview1.wasmThe adapter WASM can be downloaded from the golem-wit repository (opens in a new tab).
Reducing the component's size
The generated component's size can be reduced by stripping some parts of it using the wasm-tools strip command:
$ wasm-tools strip go_example.wasm -o go_example_stripped.wasm