用Go来开发WebAssembly入门(1)

原文:https://golangbot.com/webassembly-using-go/欢迎来到WebAssembly教程系列的第一篇。WebAssembly是什么?JavaScript已成为浏览器可以理解的唯一语言。它经历了时间的考验,可以满足大多数web应用的性能需求。但是,当遇到3D游戏、VR、AR以及图像编辑等应用的时候,JavaScript就不那么好用了,其原因是它是一种解释性的语言。虽然像Gecko和V8这样的JavaScript引擎已具备JIT特性,但JavaScript...
摘要由CSDN通过智能技术生成

原文:https://golangbot.com/webassembly-using-go/

欢迎来到WebAssembly教程系列的第一篇。

WebAssembly是什么?

JavaScript已成为浏览器可以理解的唯一语言。它经历了时间的考验,可以满足大多数web应用的性能需求。但是,当遇到3D游戏、VR、AR以及图像编辑等应用的时候,JavaScript就不那么好用了,其原因是它是一种解释性的语言。虽然像Gecko和V8这样的JavaScript引擎已具备JIT特性,但JavaScript还是不能完全满足现代web应用所需的高性能。

WebAssembly(又称wasm)的目标就是解决这个问题。它是一种专为浏览器设计的虚拟汇编语言。所谓虚拟,意思就是它不能直接运行于底层的硬件之上。因为浏览器可能运行在任意体系的硬件上,所以浏览器不可能让WebAssembly直接运行于底层硬件之上。但是,WebAssembly采用了高度优化的虚拟汇编格式,它在浏览器中运行时要比普通的JavaScript快得多,这是由于它是编译型的而且比JavaScript更靠近硬件体系。下图显示了WebAssembly与JavaScript在栈中的位置。它比JavaScript更靠近硬件一些。

WebAssembly is closer to the hardware

现有的JavaScript引擎基本上都可以支持WebAssembly虚拟汇编代码的运行。

WebAssembly的目标并不是替代JavaScript。它的目标是与JavaScript一起配合,以实现web应用中性能敏感的部分。可以从JavaScript调用WebAssembly,反之亦然。

WebAssembly通常并不需要手工编写汇编代码,而是从其它高级语言编译得到。例如,可以从Go、C、C++或Rust等代码编译得到WebAssembly。因此,在其它语言中已实现的模块也可以被编译成WebAssembly,从而在浏览器中直接使用。

如何开发?

在本教程中,我们将把一个Go程序编译为WebAssembly并在浏览器中运行它。

我们将创建一个对JSON进行格式化的简单程序。如果输入的是一个未格式化的JSON串,我们把它格式化后再打印出来。

例如,输入的JSON如下: 

{"website":"golangbot.com", "tutorials": {"string":"https://golangbot.com/strings/", "maps":"https://golangbot.com/maps/", "goroutine":"https://golangbot.com/goroutines/", "channels":"https://golangbot.com/channels/"}}

它会被格式化并在浏览器中显示以下内容:

{
  "tutorials": {
    "channels": "https://golangbot.com/channels/",
    "goroutine": "https://golangbot.com/goroutines/",
    "maps": "https://golangbot.com/maps/",
    "string": "https://golangbot.com/strings/"
  },
  "website": "golangbot.com"
}

 我们还会为这个应用创建一个UI,并在Go语言中操纵浏览器的DOM,不过这个要留到下一个教程。

本教程代码在Go 1.13以上版本中测试通过。

从Go编译WebAssembly的Hello World程序

我们从编写一个Go的最简单的hello world程序开始,把它编译成WebAssembly并在浏览器上运行。然后我们再修改这个程序,把它变成我们的JSON格式化应用。

我们先来创建以下目录结构,比如在Documents目录之下:

Documents/  
└── webassembly
    ├── assets
    └── cmd
        ├── server
        └── wasm

后面将逐步明晰各个文件夹的用途。

在~/Documents/webassembly/cmd/wasm目录下创建一个main.go文件,文件内容如下:

package main

import (  
   
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值