1. Home
  2. /
  3. Tinygo-wasm
  4. /
  5. TinyGo WASM Toggle Text

TinyGo WASM Toggle Text - Tinygo-wasm Typing CST Test

Loading…

TinyGo WASM Toggle Text — Tinygo-wasm Code

Toggles displayed text between 'ON' and 'OFF'.

# tinygo/demo/toggle.go
package main

import (
	"syscall/js"
)

var on bool

func toggle(this js.Value, args []js.Value) interface{} {
	on = !on
	text := "OFF"
	if on {
		text = "ON"
	}
	doc := js.Global().Get("document")
	doc.Call("write", text)
	return nil
}

func main() {
	js.Global().Set("toggle", js.FuncOf(toggle))
	select{}
}

Tinygo-wasm Language Guide

TinyGo WebAssembly (tinygo-wasm) is a lightweight Go compiler designed to build extremely small and fast WebAssembly binaries, enabling Go developers to run applications in browsers, edge devices, IoT systems, and embedded environments with minimal resource usage.

Primary Use Cases

  • ▸Running Go code in the browser via WebAssembly
  • ▸IoT and microcontroller applications
  • ▸Edge computing Wasm modules
  • ▸WASI applications in runtimes like wasmtime or wasmer
  • ▸Plugins for serverless Wasm platforms (Spin, Fermyon, WasmCloud, etc.)

Notable Features

  • ▸Very small Wasm binary sizes (10-20× smaller than standard Go)
  • ▸Optimized LLVM-based compiler backend
  • ▸Supports Go core features (structs, interfaces, goroutines via async tasks)
  • ▸Targets browsers, WASI, and embedded hardware
  • ▸Fast compile times and low resource usage

Origin & Creator

TinyGo was created by Ayke van Laethem and the TinyGo community starting in 2018 to make Go viable for microcontrollers, embedded systems, and WebAssembly.

Industrial Note

tinygo-wasm is heavily adopted in constrained environments: IoT, robotics, WebAssembly edge clouds, plugins in serverless Wasm runtimes, and performance-critical Go applications.

Quick Explain

  • ▸TinyGo compiles Go code into highly optimized WebAssembly modules.
  • ▸Reduces binary size drastically compared to the standard Go compiler.
  • ▸Targets browsers, WASI runtimes, embedded boards, and microcontrollers.
  • ▸Optimized for low memory, low-power, and real-time environments.
  • ▸Makes it possible to write Go applications that run safely inside Wasm sandboxes.

Core Features

  • ▸Compiles Go -> WebAssembly efficiently
  • ▸Supports Web APIs via WebAssembly syscalls
  • ▸Works with WASI imports/exports
  • ▸Supports coroutines and async-style goroutines
  • ▸Cross-compilation for many Wasm targets

Learning Path

  • ▸Learn Go fundamentals
  • ▸Understand WebAssembly basics
  • ▸Install TinyGo and build first Wasm program
  • ▸Use JavaScript to interact with Wasm
  • ▸Deploy TinyGo Wasm to browser/edge/Iot

Practical Examples

  • ▸Browser-based visualization using TinyGo Wasm
  • ▸WASI command line tools written in Go
  • ▸IoT device Wasm plugin for sensor processing
  • ▸Edge functions running in Wasm serverless runtimes
  • ▸TinyGo Wasm game loops running in browser

Comparisons

  • ▸TinyGo vs Standard Go (wasm): much smaller and faster binaries
  • ▸TinyGo vs Rust/Wasm: easier syntax, slightly less performance
  • ▸TinyGo vs AssemblyScript: more mature language, bigger binary
  • ▸TinyGo vs C/C++ Emscripten: simpler toolchain, less low-level
  • ▸TinyGo vs Zig Wasm: similar size, Go is higher-level

Strengths

  • ▸Extremely small and fast WebAssembly output
  • ▸Go syntax and tooling remain familiar
  • ▸Perfect for IoT, edge, and low-power systems
  • ▸Browser-compatible Wasm without huge runtime
  • ▸Ideal for plugin systems in Wasm-based platforms

Limitations

  • ▸Not all Go standard library packages are supported
  • ▸Garbage collector is simpler than in full Go
  • ▸Some reflection features are limited
  • ▸Multithreading (Go 1.22+) only partially supported
  • ▸Debugging can be more difficult due to compiler optimizations

When NOT to Use

  • ▸Full-fat Go backend services
  • ▸Complex applications needing full Go runtime
  • ▸Heavy concurrency or channels
  • ▸Features requiring reflection-heavy stdlib
  • ▸Projects requiring CGO or system-level integrations

Cheat Sheet

  • ▸tinygo build -target=wasm main.go
  • ▸Use wasm-opt for size reduction
  • ▸Export functions via //export
  • ▸Use syscall/js for browser APIs
  • ▸WASI target: -target=wasi

FAQ

  • ▸Can TinyGo run all Go code?
  • ▸No, some stdlib and reflection features are limited.
  • ▸Is TinyGo optimized for embedded devices?
  • ▸Yes - originally designed for microcontrollers.
  • ▸Can TinyGo target browsers?
  • ▸Yes, TinyGo Wasm runs in all modern browsers.
  • ▸Does TinyGo support goroutines?
  • ▸Partially - implemented using async tasks.
  • ▸Does TinyGo support WASI?
  • ▸Yes, TinyGo can produce WASI modules.

30-Day Skill Plan

  • ▸Week 1: TinyGo basics + compile Hello Wasm
  • ▸Week 2: JS bindings + browser DOM control
  • ▸Week 3: WASI modules and CLI tools
  • ▸Week 4: Optimization with wasm-opt
  • ▸Week 5: Full Wasm app + IoT or Edge deployment

Final Summary

  • ▸TinyGo WebAssembly compiles Go into small, fast Wasm binaries.
  • ▸Perfect for browsers, edge runtimes, and IoT workloads.
  • ▸Highly optimized binaries with predictable performance.
  • ▸Excellent choice for Go developers entering the Wasm ecosystem.
  • ▸Lightweight, portable, and efficient for constrained environments.

Project Structure

  • ▸main.go - application entry point
  • ▸go.mod - module metadata
  • ▸build.sh / Makefile - build scripts
  • ▸dist/ - output .wasm files
  • ▸examples/ - sample TinyGo Wasm code

Monetization

  • ▸Wasm plugins for SaaS platforms
  • ▸IoT firmware processing
  • ▸Edge-optimized WebAssembly services
  • ▸Serverless Wasm functions
  • ▸In-browser computation engines

Productivity Tips

  • ▸Use Makefiles for consistent Wasm building
  • ▸Rely on wasm-opt for production builds
  • ▸Keep Go code modular and small
  • ▸Use TypedArrays for efficient interop
  • ▸Test Wasm separately from JS

Basic Concepts

  • ▸Wasm module -> compiled Go program
  • ▸Imports/exports -> functions exposed to JS or host runtime
  • ▸WASI -> standard system interface
  • ▸emscripten-like APIs replaced by TinyGo shims
  • ▸JS bridge used for DOM/Web APIs

Official Docs

  • ▸https://tinygo.org/docs/
  • ▸https://tinygo.org/webassembly/

More Tinygo-wasm Typing Exercises

Simple TinyGo WASM ProgramTinyGo WASM CounterTinyGo WASM Button ClickTinyGo WASM Hello with InputTinyGo WASM Even CheckTinyGo WASM FibonacciTinyGo WASM Add NumbersTinyGo WASM Log MessageTinyGo WASM Multiply Numbers

Practice Other Languages

CReactPythonC++RustTypeScriptKotlinPHPJavaC#RubyMqlCqlN1qlCypher