Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

WebAssembly é uma das tecnologias modernas projetadas para executar mais linguagens no navegador com interoperabilidade Javascript.

WebAssembly (WASM) é um formato de instrução binária independente de plataforma para máquinas virtuais baseadas em pilha projetadas como um alvo de compilação portátil para linguagens de programação para rodar em ambientes habilitados (ou seja, a web e o servidor aplicativos).

Com o WASM, você pode executar várias linguagens de programação, incluindo Go, em seu navegador e aproveitar os recursos da linguagem. Além disso, interopere com Javascript na web.

Introdução ao WebAssembly em Go

Go fornece suporte de primeira classe para usar o WebAssembly em seus aplicativos Go, você só precisa fazer algumas configurações e compilar o código Go no WebAssembly.

Você precisará fazer algumas configurações para transpilar seu código Go para o WebAssembly. Você terá que mudar sua arquitetura Go

GOARCH variável de ambiente para era e sistema operacional Go GOOS variável para js.

Execute este comando no terminal do seu diretório de trabalho para fazer essas configurações.

Defina GOARCH=wasm GOOS=js 

A próxima etapa é transpilar seu código Go em um WebAssembly .wasm arquivo. Execute este comando para transpilar seu main.go arquivo para um arquivo chamado lib.wasm

go build -o lib.wasm main.go

Ao executar o comando, você encontrará um lib.wasm em seu diretório de trabalho.

Você precisa copiar o arquivo WebAssembly que acompanha sua instalação Go em seu diretório de trabalho para executar o arquivo WebAssembly com NodeJS em uma página da web.

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

O comando copia o wasm_exec.js arquivo em seu diretório de trabalho e serve como ponto de entrada para seu aplicativo.

Agora você pode usar o wasm_exec.js script para executar seus arquivos WASM com Go e fazer API DOM chamadas.

nó wasm_exec.js main.wasm

Iniciando um servidor Web para hospedar o site

Adicione este código dos autores Go a um arquivo HTML em seu diretório de trabalho para instanciar um fluxo de dados WebAssembly com o instantiateStreaming método.



Direitos autorais 2018 The Go Authors. Todos os direitos reservados.
O uso deste código-fonte é regido por uma licença estilo BSD
que pode ser encontrada no arquivo LICENSE.



"utf-8" />
Vá embora





O código HTML é dos Go Authors, para instanciar um fluxo WebAssembly que conecta seu código Go à página da web.

Iniciando um servidor Web para executar a página

Você vai configurar o servidor com o http pacote. Importar o http pacote e o registro pacote para registrar possíveis erros no console.

importar (
"registro"
"rede/http"
)

Você pode declarar variáveis ​​para o endereço do servidor e diretório dos arquivos que deseja servir no endereço.

var (
serverAddr = ":8080"
diretório = "."
)

Você pode usar o Servidor de arquivos método do http pacote para servir arquivos em um diretório especificado. O Servidor de arquivos O método pega o diretório e retorna uma instância do servidor de arquivos.

funçãoprincipal() {
serveFiles := http. Servidor de arquivos (http. Dir (diretório))
se erro := http. ListenAndServe (serverAddr, serveFiles); erro != nada {
registro. Fataln (err)
}
}

No principal função, você declarou uma variável de instância do servidor de arquivos para servir os arquivos no diretório raiz. O OuvirEServir O método serve os arquivos no diretório especificado na porta especificada.

Funções WebAssembly em Go

Go fornece funcionalidade para chamar funções JS e interagir com o DOM no syscall/js pacote.

O js pacote fornece acesso a ambientes de host WebAssembly no js/wasm arquitetura. Você precisará ter seu ambiente de desenvolvimento configurado para o GOARCH=wasm GOOS=js para acessar e usar o pacote.

Você pode usar os vários métodos do pacote para interagir com sua página da web. Veja como você pode registrar funções com o js pacote.

// definição da função
funçãoimprimir(este js. Valor, eu []js. Valor)interface{} {
retornar js. ValorDe (i[:])
}

O imprimir função no registro como uma função de retorno de chamada produzirá os dados passados ​​para a função no console do navegador.

Você pode registrar funções de retorno de chamada com o Definir método do Global método do js pacote. O Definir O método recebe o identificador de função e uma instância de função de retorno de chamada.

funçãoRegisterCallbackFunctions() {
js. Global().Set("imprimir", js. FuncOf(imprimir))
}

O RegisterCallbackFunctions método registra o imprimir funcionam como uma função de retorno de chamada que você pode usar no console do navegador.

WebAssembly é um recurso experimental em vários idiomas, incluindo Go

Os recursos do WebAssembly são relativamente novos para muitos idiomas, especialmente desde que o idioma recentemente se tornou um padrão W3C. O js pacote é experimental e o pacote está isento da promessa de compatibilidade Go.