Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。

这篇具有很好参考价值的文章主要介绍了Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是煎鱼。

之前写过一篇关于 Go WebAssembly 的相关文章 《一分钟搞明白!快速掌握 Go WebAssembly》,今天带来一则新消息。

想着 Go 过去了那么多年了,只在 Go1.11 支持了 WebAssembly1.0 的部分功能(js/syscall),还没有完整的支持 WebAssembly System Interface(WASI)。这可真的是大写的尴尬。

Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。

基本也没怎么更新新特性。这也侧面说明了 WebAssembly 在多语言适配的路途上,还是比较艰辛的。

Go1.21 支持 WASI

没想到,刚写完没多久。这脸啪啪的就被抽了。因为...在 Go1.21 起,Go 将会支持 WASI 的特性。预计先支持 WASI Preview1[1] 标准,后续 WASI Preview2 成熟后会继续支持新标准。

Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。

此处变更会增加新的端口和方式,如下:

  • Go 编译和运行:可以使用 GOOS=wasip1 GOARCH=wasm,可以支持 wasi_snapshot_preview1 标准的 API。未来大概率还会出现 wasip2、wasip3 等互相不兼容的情况,因为 WASI 本身并还未完全成熟。

  • 新增 syscall 包中可以使用的指令:go:wasmimport,提供 syscall 与 WASI 交互的方式。

最小 Demo 体验

Go 最新版本体验的话,可以安装 gotip(建议科学上网)。命令如下:

$ go install golang.org/dl/gotip@latest
$ gotip download

一个简单的 Go Wasm Demo:

package main
  
func main() {
    println("脑子进煎鱼了")
}

将上述 Go 程序编译为 .wasm 文件。如下编译命令:

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

快速运行体验的话,可以使用 tetratelabs/wazero[2] 开源项目,在 Go 里比较火,相对好上手。

安装命令(建议科学上网):

$ curl https://wazero.io/install.sh | sh
tetratelabs/wazero info checking GitHub for latest tag
tetratelabs/wazero info found version: 1.0.3 for v1.0.3/darwin/amd64
tetratelabs/wazero info installed ./bin/wazero

安装完毕后,运行 ./bin/wazero run app.wasm。就会输出结果:脑子进煎鱼了。

一个快速入门 Go1.21 WASM WASI 的体验就完成啦!未来 Go 在 WASM 上的开发空间也逐步扩大了。

总结

WebAssembly 在 Go 语言中的适配,总体上是忧喜参半的。因为你可以看到 syscall/js 库其实已经提交了 5 年之久,很多人提出不少问题。Go 核心团队本身并没有太多的意愿维护和更新他。

值得开心的是,截止 2023 年。在 Go WASI 上还是有关注热度的。因此有像原提案作者会持续更新 WAS 的 P1P2 的支持。作为一门新技术,我们需要持续关注。但不太建议使用过深,我们需要关注 “可持续发展” 的长期考量。

无论如何,欢迎跑通和学习这一个 Demo!

推荐阅读
  • 写在 2023 年初的后端社招面试经历(四年经验):字节 米哈游 富途 猿辅导

  • Go 的一些有趣数据:中国最多人用、开发者年轻;PHP 明显下滑的趋势

  • 快速上手 Go CGO,掌握在 Go 里写 C!

参考资料

[1]

WASI Preview1: https://github.com/WebAssembly/WASI/blob/b44552d84267af4d5899ed32364966740ef1846e/legacy/preview1/docs.md

[2]

tetratelabs/wazero: https://github.com/tetratelabs/wazero

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!文章来源地址https://www.toymoban.com/news/detail-449281.html

到了这里,关于Go1.21 速览:Go 终于打算进一步支持 WebAssembly 了。。。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue路由(router)进一步详解】

    本篇文章主要针对已经掌握Vue路由(router)基础以及路由嵌套的用户群体,如果你是Vue路由初学者的话,不仿先去看看 【Vue路由(router)的基本使用】这篇文章 接上一篇文章理解Vue路由中常用的知识点 在实际开发过程中,我们可能不单单要实现简单的页面跳转动作,可能在

    2023年04月08日
    浏览(44)
  • Druid未授权漏洞进一步的利用

    Druid是阿里巴巴数据库出品的为监控而生的数据库连接池。并且Druid提供的监控功能包括监控SQL的执行时间、监控Web URI的请求、Session监控等。Druid本身是不存在什么漏洞的,但当开发者配置不当时就可能造成未授权访问。本文除了介绍Druid未授权漏洞之外,还要讲的是一种该漏

    2024年02月11日
    浏览(45)
  • 数据结构--并查集的进一步优化

    压缩路径 − − F i n d 操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 color{red}压缩路径 -- Find操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 压缩路径 − − F in d 操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 每次Find操作,

    2024年02月15日
    浏览(58)
  • 进一步了解WPF UI 实现XAML语法

    Extensible Application Markup Language (XAML) 是一种用于声明性应用程序编程的标记语言。 Windows Presentation Foundation (WPF) 实现 XAML 处理器实现并提供 XAML 语言支持。 WPF 类型的实现为 XAML 表示提供了必要的类型支持,从而确保了顺畅的集成和高效的运行。 在 XAML 标记中创建 WPF 应用程序

    2024年02月02日
    浏览(38)
  • [架构之路-203] - 对系统需求类型的进一步澄清

    目录 业务/商业需求: 用户/客户需求: 功能性需求: 非功能性需求: 系统需求: 约束条件: 软件需求说明书: 软件质量: 是自顶向下的需求,往往来自于中高层管理人员(或监管、政策要求),基于业务运营管理的直接诉求和要求。需要使用商业/工作语言描述业务/商业

    2024年02月07日
    浏览(70)
  • iOS 微信、支付宝、银联支付组件的进一步设计

    原文地址:https://zhanglei.blog.csdn.net/article/details/121376500 有段时间没写技术文章了,一是因为工作太忙,再者因为本人文笔实在一般。最近终于闲下来,本着分享的目的将一些组件设计上的心得与大家分享。 本篇文章是基于原有一篇关于支付文章的进一步优化设计,所以在阅读

    2024年02月10日
    浏览(48)
  • GC 深入(小白,对gc有一个进一步的了解)

      一般这年轻代垃圾回收器,老年代垃圾回收器,如上图搭配着使用   1.8呢默认就是最后边那哥俩 有黑白灰三个颜色 最开始的颜色都是白色 刚找到这个对象的时候,把他标记成灰色,然后他的孩子级别的对象都找到时。 把他标记成黑色。他的孩子就是灰色了。 关于可达性

    2024年02月14日
    浏览(48)
  • 频数表和列联表,以及进一步处理分析 -- R

    数据框包含了一些分类变量,问? 操作频数表 vcdӉ中的assocstats()函数可以计算二维列联表的phi系数,列联系数,Cramer‘s V系数 总体来说,较大的数值意味着较强的相关性

    2024年01月19日
    浏览(57)
  • C++面向对象程序设计 - 类和对象进一步讨论

            在C++中,关于面向对象程序设计已经讲了很大篇幅,也例举很多案例,此篇将通过一些习题来进一步了解对象、静态成员、指针、引用、友元、类模板等等相关知识。         示例代码:         如上代码,运行后结果如下图:          现在将上述代码中,第

    2024年04月16日
    浏览(63)
  • 学习笔记---更进一步的双向链表专题~~

    目录 1. 双向链表的结构🦊 2. 实现双向链表🐝 2.1 要实现的目标🎯 2.2 创建+初始化🦋 2.2.1 List.h 2.2.2 List.c 2.2.3 test.c 2.2.4 代码测试运行 2.3 尾插+打印+头插🪼 思路分析 2.3.1 List.h 2.3.2 List.c 2.3.3 test.c 2.3.4 代码测试运行 2.4 尾删+头删🐊 2.4.0 思路分析 2.4.1 List.h 2.4.2 List.c 2.4.3 t

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包