用 WasmEdge 中的嵌入 WebAssembly 函数扩展 Golang 应用程序
GO 编程语言(Golang)是一种易于使用且安全的编程语言,可编译为高性能的原生应用程序。Golang 是编写软件基础设施和框架的非常流行的选择。
软件框架的一个关键要求是,用户能够使用自己的代码对其进行扩展和定制。但是,在 Golang 中,向现有应用程序添加用户定义的函数或扩展并不容易。通常,需要通过组合框架的源代码和用户定义的函数在源代码级别进行集成。虽然可以使用 Golang 创建动态共享模块,但这些广泛用于边缘计算的基于 ARM 的系统,缺乏对共享模块的支持。此外,源代码集成和动态模块都没有为用户定义的函数提供隔离。扩展可能会干扰框架本身,并且集成多方的用户定义函数会不安全。因此,Golang 作为“云原生”的语言,需要更好的扩展机制。
WebAssembly 提供了一种强大、灵活、安全且简单的扩展机制,可以将用户定义的函数嵌入到 Golang 应用程序中。最初为 Web 浏览器而发明,但越来越多地用于独立和服务器端应用程序,WebAssembly 是其字节码应用程序的轻量级软件容器。WebAssembly 是高性能、可移植的,并支持多种编程语言。
在本教程中,我们将讨论如何从 Golang 应用程序运行 WebAssembly 函数。 WebAssembly 函数是用 Rust 编写的。它们与 Golang 主机应用程序有着很好的隔离,同时函数之间彼此也进行了隔离。
准备工作
显然,我们需要安装 Golang,这里假设你已经安装了。
Golang 版本应该高于 1.15,我们的示例才能工作。
下一步,请安装 WasmEdge 共享库。 WasmEdge 是一个由 CNCF 托管的领先的 WebAssembly runtime 。我们将使用 WasmEdge 在 Golang 应用程序中嵌入和运行 WebAssembly 程序。
$ wget https://github.com/second-state/WasmEdge-go/releases/download/v0.8.1/install_wasmedge.sh
$ chmod +x ./install_wasmedge.sh
$ sudo ./install_wasmedge.sh /usr/local
最后,由于我们的 demo WebAssembly 函数是用 Rust 编写的,因此您还需要安装 Rust 编译器和 rustwasmc 工具链。
嵌入一个函数
目前,我们需要 Rust 编译器版本 1.50 或更低版本才能让 WebAssembly 函数与 WasmEdge 的 Golang API 一起使用。一旦 interface type 规范最终确定并得到支持,我们会赶上最新的Rust 编译器版本 。
此示例中,我们将演示如何从 Golang 应用程序调用一些简单的 WebAssembly 函数。这些