Blog
Arquitetura

Rodando Go no navegador com WebAssembly: integração com JavaScript

Como compilar código Go para WebAssembly e usá-lo lado a lado com JavaScript em uma aplicação React, com foco em performance, portabilidade e integração entre linguagens.

Dá pra rodar Go dentro do navegador como se fosse mais uma função JavaScript.
Isso é possível graças ao WebAssembly (Wasm).

Abaixo, um exemplo de como compilar um programa simples em Go, expor funções para o JavaScript e usá-las em qualquer aplicação web.

Por que usar Go + Wasm?

  • 🚀 Performance próxima ao nativo no browser.
  • 🔒 Privacidade: processamento direto no cliente, sem enviar dados ao servidor.
  • 🌍 Portabilidade: o mesmo módulo .wasm roda no navegador, em ambientes serverless ou no backend.
  • 🐹 Go traz vantagens em concorrência (goroutines) e bibliotecas maduras, sem reescrever lógica em JS.

O mesmo vale para Rust, C/C++, C#, Python (Pyodide) ou até AssemblyScript, e você escolhe a linguagem mais adequada para cada caso.

Passo a passo: Hello World em Go + Wasm

  1. Crie o arquivo main.go:
package main

import "syscall/js"

func hello(this js.Value, args []js.Value) interface{} {
    return js.ValueOf("Hello from Go in WebAssembly!")
}

func main() {
    c := make(chan struct{}, 0)
    js.Global().Set("hello", js.FuncOf(hello))
    <-c
}
  1. Inicialize um módulo Go (necessário para compilar com Go Modules):
go mod init example.com/wasm-demo
go mod tidy
  1. Compile para WebAssembly:
GOOS=js GOARCH=wasm go build -o main.wasm
  1. Baixe ou copie o runtime JavaScript (wasm_exec.js):

Se o Go foi instalado com Homebrew, normalmente o caminho é:

cp "$(go env GOROOT)/lib/wasm/wasm_exec.js" .

Se o arquivo não existir, baixe direto do repositório oficial, ajustando para sua versão (go version):

curl -o wasm_exec.js https://raw.githubusercontent.com/golang/go/go1.25.1/misc/wasm/wasm_exec.js
  1. Crie o index.html mínimo:
<script src="wasm_exec.js"></script>
<script>
  const go = new Go();
  WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject)
    .then((result) => {
      go.run(result.instance);
      alert(hello()); // chama a função Go exposta
    });
</script>
  1. Sirva os arquivos com npx serve:
npx serve .

Depois abra http://localhost:3000 no navegador e veja o Go rodando dentro do JavaScript 🎉.

Rodando aqui mesmo

O bloco abaixo carrega um módulo Go compilado do mesmo jeito (o código está em wasm/go-demo no repositório do site) e chama as funções dele a partir desta página.

go → webassembly · ao vivo

O código Go deste post compilado com GOOS=js GOARCH=wasm. Clique para baixar o binário (~700 KB comprimido) e chamar as funções direto daqui.

E agora?

Esse é só o “Hello World”.
Mas o mesmo padrão pode ser usado para:

  • Processar dados financeiros (ex: CNAB, boletos, cálculos de risco).
  • Executar cálculos matemáticos ou criptográficos direto no browser.
  • Reaproveitar bibliotecas Go existentes em aplicações web modernas.
  • Rodar simuladores ou regras de negócio no cliente sem expor lógica sensível em JS.

Conclusão

O WebAssembly está se consolidando como uma ponte entre outras linguagens e o ecossistema JavaScript.
Você não precisa mais ficar limitado ao JS: pode escrever em Go, Rust, C++ ou Python, compilar para Wasm e rodar em qualquer lugar que suporte navegador ou Node.js.

💬 Já experimentou rodar outra linguagem dentro do navegador usando WebAssembly?

esc
  • Home Início
  • Sobre Trajetória e como trabalho
  • Blog Artigos sobre IA, plataforma e liderança
  • Projetos Demos públicos de frontend com IA
  • Currículo Web, PDF, Markdown e texto
  • Setup Hardware e ferramentas
  • Classificar ticket com LLM custa 44 vezes mais? O que a Amazon mediu ao trocar o Sonnet por um modelo de decisão Arquitetura
  • Inference hooks do Claude: se o seu servidor de política cair, quem decide é um checkbox Arquitetura
  • Claude Code vazava o e-mail no User-Agent: o que eu checaria amanhã Segurança
  • Sete fases e onze testes: como a tela do agente aguenta queda, pausa e falta de rede Arquitetura
↑↓ navegar ↵ abrir esc fechar