Skip to main content
Version: 1.x

Go HTTP Client

This example is a WebAssembly component that calls a random number generator service to get random numbers.

The application...

📦 Dependencies

Before starting, ensure that you have the following installed in addition to the Go (1.23+) toolchain:

👟 Run the example

Clone the wasmCloud/go repository:

shell
git clone https://github.com/wasmCloud/go.git

Change directory to examples/component/http-client:

shell
cd examples/component/http-client

In addition to the standard elements of a Go project, the example directory includes the following files and directories:

  • build/: Target directory for compiled .wasm binaries
  • gen/: Target directory for Go bindings of interfaces
  • wit/: Directory for WebAssembly Interface Type (WIT) packages that define interfaces
  • wadm.yaml: Declarative application manifest
  • wasmcloud.lock: Automatically generated lockfile for WIT packages
  • wasmcloud.toml: Configuration file for a wasmCloud application

Start a local development loop

Run wash dev to start a local development loop:

shell
wash dev

The wash dev command will:

  • Start a local wasmCloud environment
  • Build this component
  • Deploy your application and all requirements to run the application locally, including...
    • Your locally built component
    • The HTTP server provider, which will receive requests from the outside world (on port 8000 by default)
    • The HTTP client provider, which will call a random number generator service
    • Necessary links between providers and your component so your component can handle web traffic
  • Watch your code for changes and re-deploy when necessary.

Once the application is deployed, open another terminal tab. To ensure that the application has reached Deployed status, you can use wash app list:

shell
wash app list

Send a request

When you send a request, the component will call an upstream API and return a list of random numbers:

shell
curl localhost:8000
text
[438,424,166,260,681]

Clean up

You can stop the wash dev process with Ctrl-C.

⚠️ Issues/FAQ

curl produces a "failed to invoke" error

If curling produces...

text
failed to invoke `wrpc:http/incoming-handler.handle`: failed to invoke `wrpc:http/incoming-handler@0.1.0.handle`: failed to shutdown synchronous parameter channel: not connected%

...the HTTP server may not have finished starting up. You can check that the application has reached Deployed status with wash app list.

If the issue persists, you may have a lingering HTTP server provider running on your system. You can use pgrep to check:

shell
pgrep -la ghcr_io
text
4007604 /tmp/wasmcloudcache/NBCBQOZPJXTJEZDV2VNY32KGEMTLFVP2XJRZJ5FWEJJOXESJXXR2RO46/ghcr_io_wasmcloud_http_server_0_23_1

📖 Further reading

For more on building components, see the Component Developer Guide in the wasmCloud documentation.