From 058165ca1c90cb07bc294c17ab5fb08ed111f5e1 Mon Sep 17 00:00:00 2001 From: syumai Date: Sun, 30 Apr 2023 11:54:32 +0900 Subject: [PATCH] add worker-go template --- _templates/cloudflare/worker-go/.gitignore | 1 + _templates/cloudflare/worker-go/Makefile | 12 ++++ _templates/cloudflare/worker-go/README.md | 58 +++++++++++++++++++ _templates/cloudflare/worker-go/main.go | 24 ++++++++ _templates/cloudflare/worker-go/wrangler.toml | 9 +++ 5 files changed, 104 insertions(+) create mode 100644 _templates/cloudflare/worker-go/.gitignore create mode 100644 _templates/cloudflare/worker-go/Makefile create mode 100644 _templates/cloudflare/worker-go/README.md create mode 100644 _templates/cloudflare/worker-go/main.go create mode 100644 _templates/cloudflare/worker-go/wrangler.toml diff --git a/_templates/cloudflare/worker-go/.gitignore b/_templates/cloudflare/worker-go/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/_templates/cloudflare/worker-go/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/_templates/cloudflare/worker-go/Makefile b/_templates/cloudflare/worker-go/Makefile new file mode 100644 index 0000000..fe89215 --- /dev/null +++ b/_templates/cloudflare/worker-go/Makefile @@ -0,0 +1,12 @@ +.PHONY: dev +dev: + wrangler dev + +.PHONY: build +build: + go run github.com/syumai/workers/cmd/workers-assets-gen@latest -mode=go + GOOS=js GOARCH=wasm go build -o ./build/app.wasm . + +.PHONY: publish +publish: + wrangler publish diff --git a/_templates/cloudflare/worker-go/README.md b/_templates/cloudflare/worker-go/README.md new file mode 100644 index 0000000..2a03f91 --- /dev/null +++ b/_templates/cloudflare/worker-go/README.md @@ -0,0 +1,58 @@ +# worker-template-go + +- A template for starting a Cloudflare Worker project with Go. +- This template uses [`workers`](https://github.com/syumai/workers) package to run an HTTP server. + +## Notice + +- A free plan Cloudflare Workers only accepts ~1MB sized workers. + - Go Wasm binaries easily exceeds this limit, so **you'll need to use a paid plan of Cloudflare Workers** (which accepts ~5MB sized workers). + +## Usage + +- `main.go` includes simple HTTP server implementation. Feel free to edit this code and implement your own HTTP server. + +## Requirements + +- Node.js +- [wrangler](https://developers.cloudflare.com/workers/wrangler/) + - just run `npm install -g wrangler` +- Go + +## Getting Started + +``` +$ wrangler generate my-app syumai/workers/_templates/cloudflare/worker-go +$ cd my-app +$ go mod init +$ go mod tidy +$ make dev # start running dev server +$ curl http://localhost:8787/hello +Hello! +``` + +- To change worker name, please edit `name` property in `wrangler.toml`. + +## Development + +### Commands + +``` +make dev # run dev server +make build # build Go Wasm binary +make publish # publish worker +``` + +### Testing dev server + +- Just send HTTP request using some tools like curl. + +``` +$ curl http://localhost:8787/hello +Hello! +``` + +``` +$ curl -X POST -d "test message" http://localhost:8787/echo +test message +``` diff --git a/_templates/cloudflare/worker-go/main.go b/_templates/cloudflare/worker-go/main.go new file mode 100644 index 0000000..2e2326c --- /dev/null +++ b/_templates/cloudflare/worker-go/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "bytes" + "io" + "net/http" + + "github.com/syumai/workers" +) + +func main() { + http.HandleFunc("/hello", func(w http.ResponseWriter, req *http.Request) { + msg := "Hello!" + w.Write([]byte(msg)) + }) + http.HandleFunc("/echo", func(w http.ResponseWriter, req *http.Request) { + b, err := io.ReadAll(req.Body) + if err != nil { + panic(err) + } + io.Copy(w, bytes.NewReader(b)) + }) + workers.Serve(nil) // use http.DefaultServeMux +} diff --git a/_templates/cloudflare/worker-go/wrangler.toml b/_templates/cloudflare/worker-go/wrangler.toml new file mode 100644 index 0000000..7e68af0 --- /dev/null +++ b/_templates/cloudflare/worker-go/wrangler.toml @@ -0,0 +1,9 @@ +name = "go-worker" +main = "./build/worker.mjs" +compatibility_date = "2022-11-19" +compatibility_flags = [ + "streams_enable_constructors" +] + +[build] +command = "make build"