2023年9月13日 Go生态洞察:WASI支持在Go中的实现


🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2023年9月13日 Go生态洞察:WASI支持在Go中的实现 🌐
      • 摘要
      • 引言
    • 正文
      • 🚀 WebAssembly简介
      • 🛠️ WebAssembly System Interface(WASI)
      • 🌟 Go中的WASI使用方法
      • 🧪 使用wasip1运行go测试
      • 📦 使用go:wasmimport包装Wasm函数
      • 🚧 限制
      • 🔮 Go中Wasm的未来
      • 🌟 参与其中
      • 总结
      • 参考资料
      • 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2023年9月13日 Go生态洞察:WASI支持在Go中的实现 🌐

摘要

🐯 猫头虎博主在此,带大家一起探索Go语言的新天地!在本篇博客中,我们将深入研究Go 1.21版本如何通过WASI syscall API为WebAssembly提供支持。准备好,一起在Go的世界中冲浪吧!不要忘记,搜索“Go WASI”可以发现更多精彩内容!

引言

自从Go 1.11引入对WebAssembly的支持以来,Go语言与Wasm的结合愈发紧密。如今,Go 1.21版在这一领域又迈出了新步伐,引入了针对WASI preview 1 syscall API的新端口wasip1。让我们一探究竟,看看Go如何利用WASI,进一步扩展其WebAssembly的能力。

正文

🚀 WebAssembly简介

WebAssembly(Wasm)最初为Web设计,是一种二进制指令格式,能够让开发者在浏览器中以接近原生速度运行高性能、低层次的代码。Go在1.11版本首次加入了对Wasm的编译支持,通过js/wasm端口实现。

🛠️ WebAssembly System Interface(WASI)

WASI为Wasm可执行文件定义了一个syscall API,允许它们与文件系统、系统时钟、随机数据工具等系统资源进行交互。WASI的最新版本被称为wasi_snapshot_preview1,Go中相应的GOOS值为wasip1。随着API的不断发展,Go未来可能会添加新的GOOS以支持它们。

🌟 Go中的WASI使用方法

要在Go中使用WASI,首先确保安装了至少1.21版本的Go。在本示例中,我们使用Wasmtime作为宿主运行我们的二进制文件。首先,我们有一个简单的main.go

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

我们可以使用以下命令为wasip1构建它:

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

然后,使用wasmtime执行生成的文件:

$ wasmtime main.wasm
Hello world!

🧪 使用wasip1运行go测试

除了构建和运行二进制文件外,我们还希望能够直接运行go test。通过将misc/wasm目录添加到您的PATH中,可以使用所选的Wasm宿主运行测试。这是通过go testPATH中找到misc/wasm/go_wasip1_wasm_exec文件时自动执行它来实现的。

$ export PATH=$PATH:$(go env GOROOT)/misc/wasm
$ GOOS=wasip1 GOARCH=wasm go test ./...

📦 使用go:wasmimport包装Wasm函数

Go 1.21还引入了一种新的编译器指令:go:wasmimport。这使我们能够将对注释函数的调用转换为对宿主模块名称和函数名称指定的函数的调用。例如,wasip1 syscall API定义了random_get函数,并通过Go标准库中定义的函数包装器暴露给Go标准库。

🚧 限制

Wasm是单线程架构,没有并行性。

在Wasm中,wasip1 API缺少对网络套接字的完整实现,这是Go标准库中一些最受欢迎功能的重要组成部分。

🔮 Go中Wasm的未来

wasip1/wasm端口的添加只是我们希望为Go带来的Wasm能力的开始。请关注相关的议题跟踪器,了解更多关于在Wasm中导出Go函数(go:wasmexport)、32位端口和未来WASI API兼容性的提案。

🌟 参与其中

如果您正在尝试Wasm和Go并希望做出贡献,请参与进来!Go问题跟踪器跟踪所有正在进行的工作,Gophers Slack上的#webassembly频道是讨论Go和WebAssembly的好地方。

总结

本文被猫头虎的Go生态洞察专栏收录,详情点击这里。我们深入探讨了Go 1.21如何通过新端口wasip1支持WASI,这是Go在WebAssembly领域的一大步。希望你们喜欢这次的探索旅程!

参考资料

  1. WebAssembly 官网
  2. WASI 官网
  3. Wasmtime
  4. Go语言议题跟踪器

下一篇预告

🐯 猫头虎博主下一篇要带大家深入了解“Go 1.22中循环修正的细节”。敬请期待,我们将探索Go 1.22中对循环机制的改进及其对编程实践的影响!�

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21、命令执行

文章目录 一、命令执行概述1.1 基本定义1.2 原理1.3 两个条件1.4 命令执行漏洞产生的原因1.5 管道符号和通用命令符 二、远程命令执行2.1 远程命令执行相关函数2.2 远程命令执行漏洞的利用 三、系统命令执行3.1 相关函数3.2 系统命令执行漏洞利用 四、命令执行漏洞防御 一、命令…

阿里云生态离线数仓

1. 大数据开发治理平台 DataWorks 功能齐全:10多年大数据建设沉淀完整的平台,覆盖数据开发治理的全生命周期 简单易用:全图形化界面,SQL为主的数据开发方式 安全稳定:双11日千万级任务稳定调度&#x…

一:C语言常见概念

一:C语言常见概念 1.认识C语言: ​ C语言是人和计算机交流的语言 ​ C语言是一门面向过程的语言,而C,Java,Python等是一门面向对象的语言 ​ 软件开发(项目):面向过程面向对象 …

maven下载安装与配置

文章目录 1. Maven下载2. 配置settings.xml2.1 指定Maven的本地仓库2.2 配置阿里云提供的镜像仓库2.3 配置 Maven 工程的基础 JDK 版本 3. 配置环境变量3.1 检查 JAVA_HOME 配置是否正确3.2 配置 MAVEN_HOME3.3 配置PATH3.4 验证 1. Maven下载 【Maven官网地址】 【Maven下载…

2023五岳杯量子计算挑战赛数学建模思路+模型+代码+论文

赛题思路:12月6日晚开赛后第一时间更新,获取见文末名片 “五岳杯”量子计算挑战赛,是国内专业的量子计算大赛,也是玻色量子首次联合移动云、南方科技大学共同发起的一场“企校联名”的国际竞赛,旨在深度融合“量子计算…

【外观模式】SpringBoot集成mail发送邮件

前言 发送邮件功能,借鉴 刚果商城,根据文档及项目代码实现。整理总结便有了此文,文章有不对的点,请联系博主指出,请多多点赞收藏,您的支持是我最大的动力~ 发送邮件功能主要借助 mail、freemarker以及rocke…

Java 泛型相关知识

什么是泛型? Java 泛型(generics)是JDK5中引入的一种参数化类型特性。 为什么使用泛型,使用泛型的好处? 代码更健壮(只要编译期没有警告,那么运行期就不会出现 ClassCastException)代码更简洁(不用强转)代码更灵活,复用什么是参数化类型: 把类型当参数一样传递<…

React基础语法整理

安装&#xff1a; yarn create react-app reatc-lesson --template typescript yarn create 创建一个react-app的应用 项目名称 typescript 的模板react-app 官方地址 https://create-react-app.bootcss.com/docs/adding-typescriptreact 语法文档 https://zh-hans.react.dev…

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

使用命令行移除VSAN中故障磁盘

原创作者&#xff1a;运维工程师 谢晋 使用命令行移除VSAN中故障磁盘 前提故障盘移除 前提 客户有套VSAN环境内有一台服务器的磁盘组出现了一块故障的数据盘&#xff0c;但该盘已经处于完全掉线状态&#xff0c;无法进行正常移除。如下图&#xff1a; 如果遇到这种情况&am…

P9 LinuxC 进程概述 终端启动的程序父进程是终端

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f6f8;推荐专栏3: ​​​​​​《链表_ChenP…

【1】一文读懂PyQt简介和环境搭建

目录 1. PyQt简介 1.1. Qt 1.2. PyQt 1.3. 关于PyQt和PySide 2. 通过pip安装PyQt5 3. 无法运行处理 4. VSCode配置PYQT插件 PyQt官网:Riverbank Computing | Introduction 1. PyQt简介 PyQt是一套Python的GUI开发框架,即图形用户界面开发框架。 Python中经常使用的GU…

FreeRTOS的内存管理方法(超详细)

内存管理 我们知道每次创建任务、队列、互斥锁、软件定时器、信号量或事件组时&#xff0c;RTOS 内核都需要 RAM &#xff0c; RAM 可以从 RTOS API 对象创建函数内的 RTOS 堆自动动态分配&#xff0c; 或者由应用程序编写者提供。 如果 RTOS 对象是动态创建的&#xff0c;那么…

Leetcode—2646.最小化旅行的价格总和【困难】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的价格总和 算法思想 看灵神的 实现代码 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

发现数学之美--微积分的起源和用途(一文搞懂微积分)

数学&#xff0c;改变世界的基石。微积分十九世纪的三大自然发现之一&#xff0c;迪卡尔建立了解析几何&#xff0c;把数与图结合在一起&#xff0c;微积分的发现与创立&#xff0c;是数学新的里程碑&#xff0c;解决了常规方法无法解决的问题&#xff0c;是一次伟大的革命。迪…

git安装和配置

git安装和配置 一、软件介绍 Git是一个免费开源的分布式版本控制系统&#xff0c;旨在快速高效地处理从小型到大型项目的所有内容。 Git易于学习&#xff0c;占地面积小&#xff0c;性能闪电般快。它以廉价的本地分支、方便的暂存区域和多个工作流等功能胜过了Subversion、C…

【论文阅读】Reachability and distance queries via 2-hop labels

Cohen E, Halperin E, Kaplan H, et al. Reachability and distance queries via 2-hop labels[J]. SIAM Journal on Computing, 2003, 32(5): 1338-1355. Abstract 图中的可达性和距离查询是许多应用的基础&#xff0c;从地理导航系统到互联网路由。其中一些应用程序涉及到巨…

金南瓜SECS/GEM C# SDK 快速使用指南

本文对如何使用金南瓜SECS/GEM C# SDK 快速创建一个满足SECS/GEM通信要求的应用程序&#xff0c;只需简单3步完成。 第一步&#xff1a;创建C# .NET程序 示例使用Visual Studio 2010&#xff0c;使用者可以选择更高级版本 Visual Studio 第二步&#xff1a;添加DLL库引用&am…

图论-并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图,求最小生成树Kruskal算法和最近公共祖先(LCA)等. 并查集的基本操作主要有: .1.初始化 2.查询find 3.合并union 一般我们都会采用路径压缩 这样…

git标签的管理与思考

git 标签管理 git 如何打标签呢&#xff1f; 标签是什么? 标签 相当于一个 版本管理的一个贴纸&#xff0c;随时 可以通过标签 切换到 这个版本的状态 &#xff0c; 有人可能有疑问 git commit 就可以知道 代码的改动了&#xff0c; 为啥还需要标签来管理呢&#xff1f; …