1.8 KiB
1.8 KiB
Spin HTTP components in TinyGo
This example showcases how to build Spin HTTP components using TinyGo.
package main
import (
"fmt"
"net/http"
spinhttp "github.com/fermyon/spin/sdk/go/http"
)
func init() {
spinhttp.Handle(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
fmt.Fprintln(w, "Hello Fermyon!")
})
}
func main() {}
For more information and examples for using TinyGo with WebAssembly, check the official TinyGo documentation and the Wasm examples.
Building this as a WebAssembly module can be done using the tinygo
compiler:
$ go mod tidy
$ spin build
Executing the build command for component tinygo-hello: tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go
Successfully ran the build command for the Spin components.
Finally, we can create a Spin application configuration to execute this component:
apiVersion = "0.1.0"
authors = ["Fermyon Engineering <engineering@fermyon.com>"]
description = "A simple Spin application written in (Tiny)Go."
name = "spin-hello-world"
trigger = { type = "http", base = "/" }
version = "1.0.0"
[[component]]
id = "hello"
source = "main.wasm"
[component.trigger]
route = "/hello"
[component.build]
command = "tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go"
At this point, we can execute the application with the spin
CLI:
$ RUST_LOG=spin=trace spin up
The application can now receive requests on http://localhost:3000/hello
:
$ curl -i localhost:3000/hello
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 16
date: Wed, 09 Mar 2022 17:23:08 GMT
Hello, Fermyon!