Go1.21:Go WASI 初试

前言

Go 1.21 添加了WebAssembly 系统接口 (WASI)的实验端口,预览版 1 。借此机会,学习一下WASI相关知识点和Go 1.21对WASI的支持的新特性。本文就此简要记录一下。

WebAssembly

WebAssembly(Wasm)是一种基于堆栈的虚拟机的二进制指令格式。旨在在 Web 上良好运行,但它 不仅限于 Web。主要解决WebAssembly

核心WebAssembly语言独立于周围环境,WebAssembly完全通过API与外界交互。在Web上,它自然使用浏览器提供的现有Web API。然而,在浏览器之外,目前还没有可以编写 WebAssembly 程序的标准 API 集。这使得创建真正可移植的非 Web WebAssembly 程序变得困难。

WASI

WASI 是填补这一空白的一项举措,它提供了一组干净的 API,可以通过多个引擎在多个平台上实现,并且不依赖于浏览器功能。

WebAssembly 系统接口(WASI)是由Wasmtime项目设计的一个新的 API 系列,旨在作为 WebAssembly 的标准引擎独立的非面向 Web 系统的 API。最初,重点是 WASI Core,这是一个涵盖文件、网络和其他一些内容的 API 模块。预计将来会添加更多模块。

Go1.21 支持WASI

Go 1.21 添加了WebAssembly 系统接口 (WASI)的实验端口,预览版 1 ( GOOS=wasip1, GOARCH=wasm)。

小试牛刀

我们实验一下wasmtime运行go,创建一个简单的example: main.go

go 复制代码
package main

import "fmt"

func main() {
	fmt.Println("Hello world!")
}

通过以下命令编译为 wasip1,将在目录下生成 main.wasm

GOOS=wasip1 GOARCH=wasm go build -o main.wasm main.go

安装wasmtime (mac)

WASI的运行时有 Wasmtime、Wazero、WasmEdge、Wasmer 和 NodeJS等,wasmtime为快速、安全的 WebAssembly 运行时,安装也比较简单:

curl https://wasmtime.dev/install.sh -sSf | bash

或者自行下载安装,下载地址:

github.com/bytecodeall...

wasmtime 运行.wasm

接着我们用wasmtime运行上一步生成的main.wasm

cmd 复制代码
$ wasmtime main.wasm
Hello world!

小结

WebAssembly是一种二进制指令格式,旨在提升Web的性能。WASI提供了跨平台应用程序开发的一种标准化的接口,使得WebAssembly模块能够在不同的操作系统和平台上运行,同时保持可移植性、安全性和高性能。Go 1.21 添加了WebAssembly 系统接口 (WASI)的实验端口,可以在构建程序是添加【GOOS=wasip1 GOARCH=wasm】实现。wasmtime为快速、安全的 WebAssembly 运行时,文中演示了wasmtime运行一个简单的go-wasi应用例子的过程。

参考

相关推荐
光头闪亮亮15 小时前
gozxing库-对图片中多个二维码进行识别的完整示例教程
go
召摇16 小时前
在浏览器中无缝运行Go工具:WebAssembly实战指南
后端·面试·go
王中阳Go1 天前
我发现不管是Java还是Golang,懂AI之后,是真吃香!
后端·go·ai编程
半枫荷1 天前
二、Go语法基础(基本语法)
go
struggle20252 天前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell
Mgx3 天前
高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
go
考虑考虑3 天前
go格式化时间
后端·go
光头闪亮亮3 天前
ZBar 条码/二维码识别工具介绍及golang通过cmd调用ZBar从图片中批量识别二维码
go
东风t西瓜4 天前
golang项目开发环境配置
go
zhuyasen4 天前
在某些 Windows 版本,Go 1.25.x 编译出来的 exe 运行报错:此应用无法在你的电脑上运行
windows·go·编译器