Nos últimos anos, o desenvolvimento web tem passado por transformações significativas, e uma das tecnologias que mais tem despertado o interesse de desenvolvedores é o WebAssembly (Wasm).
Originalmente projetado para ser executado em navegadores, o Wasm se tornou uma tecnologia promissora também para ambientes de backend. Mas como o WebAssembly se relaciona com o Go? E por que você deveria se importar?
Antes de responder essas perguntas, vamos explorar um pouco melhor do que é WebAssembly e onde essa tecnologia pode ser aplicada.
O que é WebAssembly?
WebAssembly é um formato binário que pode ser executado em diversos ambientes, como navegadores, servidores e dispositivos de IoT. Em linhas gerais, um ambiente Wasm oferece uma maneira de rodar código de baixo nível de maneira segura e eficiente, independentemente da linguagem de programação utilizada para criar o binário.
Algumas características principais do WebAssembly incluem:
- Portabilidade: Pode ser executado em diferentes plataformas sem modificações.
- Desempenho: Quase tão rápido quanto código nativo.
- Segurança: O sandboxing impede que o código malicioso afete o sistema.
Em resumo, o Wasm permite que aplicações desenvolvidas em linguagens como Go, Rust e C/C++ sejam executadas em qualquer lugar que suporte WebAssembly, desde navegadores até servidores.
Casos de Uso do WebAssembly
Agora que entendemos melhor o que é WebAssembly, vamos ver alguns cenários onde podemos aplicar essa tecnologia.
1. Aplicações Web Performáticas
O Wasm permite que você execute aplicações intensivas em computação diretamente no navegador, como editores de imagem, ferramentas CAD ou jogos.
2. Backend Multiplataforma
No backend, o Wasm pode ser utilizado para criar módulos de código reutilizáveis, portáveis e seguros, que podem ser executados em diferentes servidores sem ajustes.
3. IoT e Edge Computing
O Wasm é ideal para dispositivos IoT e computação em borda (Edge Computing), pois oferece um ambiente seguro e leve para executar código em dispositivos com recursos limitados.
Criando um Módulo WebAssembly em Go
Com os conceitos em mente, vamos implementar um simples programa em Go que faz a soma de dois valores. Depois de implementado, vamos gerar o binário compatível com WebAssembly.
Para iniciar, vamos criar um novo módulo chamado exemplo-wasm.
go mod init exemplo-wasm
Agora, crie um arquivo main.go com o seguinte conteúdo:
package main
import (
"syscall/js"
)
func add(this js.Value, args []js.Value) interface{} {
a := args[0].Int()
b := args[1].Int()
return a + b
}
func main() {
js.Global().Set("add", js.FuncOf(add))
select {}
}
Este código cria uma função chamada add que recebe dois números e retorna sua soma. A função é exposta ao ambiente JavaScript através do pacote syscall/js.
Com a implementação finalizada, vamos executar o comando abaixo para gerar o binário de extensão .wasm.
GOOS=js GOARCH=wasm go build -o main.wasm
Note que não há nada de especial no comando de build que executamos.
Após o arquivo ter sido gerado, precisamos copiar o js com runtime para Go. O comando abaixo irá copiar o arquivo para o mesmo diretório do arquivo main.wasm.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Por fim, crie um arquivo index.html com o conteúdo abaixo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebAssembly com Go</title>
<script src="wasm_exec.js"></script>
</head>
<body>
<h1>Teste WebAssembly com Go</h1>
<button onclick="executeAdd()">Somar 5 + 3</button>
<script>
async function loadWasm() {
const go = new Go();
const wasm = await WebAssembly.instantiateStreaming(fetch('main.wasm'), go.importObject);
go.run(wasm.instance);
}
function executeAdd() {
alert(add(5, 3));
}
loadWasm();
</script>
</body>
</html>
Executando o Projeto
Você pode utilizar um servidor HTTP simples para servir os arquivos gerados:
python3 -m http.server
Abra o navegador e acesse http://localhost:8000. Você verá o botão que, ao ser clicado, exibirá um alert com o resultado da soma.
Conclusão
O WebAssembly é uma tecnologia promissora que pode expandir o alcance do seu código Go. Com ele, você pode criar aplicações mais performáticas, seguras e portáveis, seja no frontend ou no backend.
Se você gostou desse conteúdo, inscreva-se na nossa newsletter para não perder nenhuma novidade!
E se você quer apoiar o nosso trabalho e acessar conteúdos exclusivos, torne-se um assinante pago do nosso blog. Além de nos ajudar a continuar criando conteúdos de qualidade, você terá acesso a materiais avançados e discussões aprofundadas sobre Go, cloud e arquitetura de software.
Gostou do conteúdo?
- ✅ Inscreva-se na nossa newsletter para receber mais dicas práticas sobre Go, Kubernetes e desenvolvimento de software diretamente no seu e-mail!
- 🚀 Torne-se um assinante pago do blog e tenha acesso a conteúdos exclusivos, como tutoriais avançados, estudos de caso e muito mais!
Faça parte da comunidade!
Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.
Livros Recomendados
Abaixo listei alguns dos melhores livros que já li sobre GO.




