The Go Component SDK provides a set of packages to simplify the development of WebAssembly components targeting the wasmCloud host runtime.
Writing a wasmCloud Capability Provider? Check out the Go Provider SDK.
Requires tinygo 0.33 or above.
Import go.wasmcloud.dev/component
in your Go module.
go get go.wasmcloud.dev/component@v0.0.5
Import the SDK WIT. In wit/deps.toml
:
wasmcloud-component = "https://github.com/wasmCloud/component-sdk-go/archive/v0.0.5.tar.gz"
Run wit-deps
to update your wit dependencies.
And in your world definition:
include wasmcloud:component-go/imports@0.1.0;
The wasihttp
package provides an implementation of http.Handler
backed by wasi:http
, as well as a http.RoundTripper
backed by wasi:http
.
wasihttp.Handle
registers an http.Handler
to be served at a given path, converting wasi:http
requests/responses into standard http.Request
and http.ResponseWriter
objects.
package main
import (
"net/http"
"go.wasmcloud.dev/component/net/wasihttp"
)
func httpServe(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, world!"))
}
func init() {
// request will be fulfilled via wasi:http/incoming-handler
wasihttp.HandleFunc(httpServe)
}
package main
import (
"net/http"
"go.wasmcloud.dev/component/net/wasihttp"
)
var (
wasiTransport = &wasihttp.Transport{}
httpClient = &http.Client{Transport: wasiTransport}
)
func httpClient() {
// request will be fulfilled via wasi:http/outgoing-handler
httpClient.Get("http://example.com")
}
The wasilog
package provides an implementation of slog.Handler
backed by wasi:logging
.
Sample usage:
package main
import (
"log/slog"
"go.wasmcloud.dev/component/log/wasilog"
)
func wasilog() {
logger := slog.New(wasilog.DefaultOptions().NewHandler())
logger.Info("Hello")
logger.Info("Hello", "planet", "Earth")
logger.Info("Hello", slog.String("planet", "Earth"))
}
See wasilog.Options
for log level & other configuration options.
Similar projects: