为什么使用Golang开发Web端应用?

以Golang为例子,使用Golang开发移动端应用在处理复杂业务逻辑和多端需求时,展现出了显著的优势。相比于Kotlin、Java、Flutter和JavaScript等其他技术栈,Go语言在生态支持、二进制体积和性能优化方面都表现出色。其轻量级的二进制文件和出色的性能使得在复杂业务逻辑和特定场景下的应用开发中,能够显著节省开发成本。 通过利用Go语言的跨平台编译能力,开发者能够将复杂的核心功能代码一次性编写,然后编译到各个目标平台上。这种统一的底层架构不仅降低了开发难度,还大大减少了问题排查的复杂度。在移动端或者Web前端开发中,开发人员只需通过调用Go编译生成的库文件(如.so或.wasm格式),并通过传入回调函数接受回调来实现UI的更新,从而进一步降低了开发成本和维护成本。 采用Go语言作为移动端复杂业务逻辑的核心开发语言,不仅能够提升开发效率和性能表现,还能在多端需求下实现代码的重用和统一管理,为开发团队带来显著的经济效益和技术优势。

什么是wasm

WebAssembly 是基于栈式虚拟机的虚拟二进制指令集(V-ISA)。它是一种给高级编程语言设计的编译目标。Wasm 的出现更能够让我们直接在 Web 平台上,使用 C/C++ 或者其他语言的代码库,同时 Wasm 还能让 Web 应用具有更高的性能。 Wasm 的设计目标是为了能够在JavaScript之外,提供一种高效的实现可能,为构建更高性能的Web应用提供支持。 我们可以简单把他理解为更低级的Java字节码,Python字节码,由wasm虚拟机/运行时来运行。 在 Web 应用程序中,你可以使用 JavaScript 提供的 WebAssembly API 来加载和实例化 WebAssembly 模块。你可以使用 WebAssembly.instantiate() 方法加载模块,并得到一个表示模块实例的对象。你还可以向模块传递导入值,以供模块内部使用。目前在主流浏览器中都已经支持Wasm。JS层就可以对其进行调用。WebAssembly文件中存储着字节码,位于JavaScript引擎中的WebAssembly虚拟机将会执行字节码。

Wasm的编译

Golang编译到wasm

GOOS=js GOARCH=wasm go build -o main.wasm apiwasm/main.go

Wasm在浏览器运行

主流浏览器JS引擎一般自带了Wasm运行时 Wasm在嵌入式设备,服务器运行

一些Wasm在服务器上跑的运行时

DEMO:以Go语言为例子开发跨平台SDK

Wasm技术补充:Wasm的真实应用场景

Wasm在以下场景可以被使用:

  • Serverless云函数:将云函数编译成Wasm指令集,高性能,可移植性。
  • 云原生,容器技术,甚至未来可能替代现有容器技术。
  • 区块链,运行在以太坊上执行智能合约
  • 浏览器平台游戏开发
  • 浏览器运行的虚拟机和解释器
  • 浏览器上图像处理、音视频处理、数据压缩、密码学等应用的执行速度
  • 移动设备、物联网
  • 机器学习, 如TensorFlow,已经支持WebAssembly作为编译目标这使得开发人员可以在Web平台上运行高性能的机器学习应用程序。 使用Wasm技术的知名Web应用:爱奇艺直播,Google地球,AutoCAD等。 Wasm在浏览器上已经大获成功。 Wasm在Serverless云函数上小有成就。 但是在嵌入式开发,单片机领域依然属于画大饼的阶段,因为Wasm轻量化的运行时可以运行在大多数嵌入式设备,或许未来它在工业领域能有巨大机遇。