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.pswp.cn/news/210261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210261.shtml
英文地址,請注明出處:http://en.pswp.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 系統命令執行漏洞利用 四、命令執行漏洞防御 一、命令…

Vue筆記(三)深入組件

組件注冊 組件注冊有兩種方式: 全局注冊 可以使用Vue應用實例的.component()方法,讓組件在當前Vue應用中全局可用,.component()方法可以被鏈式調用。全局注冊的組件可以在此應用的任意組件的模版中使用。import { createApp } from vue imp…

阿里云生態離線數倉

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下載…

微服務架構下的分布式事務

系統軟件為了實現一定的業務,會將現實中的人、事、物進行抽象表示,并將其映射為系統中的模型。 業務模型大致可以按以下來構建: 1、定義系統中應該存在哪些實體、實體上有哪些屬性。 2、定義實體之間的各種拓撲關系,如從屬、嵌套…

2023五岳杯量子計算挑戰賽數學建模思路+模型+代碼+論文

賽題思路:12月6日晚開賽后第一時間更新,獲取見文末名片 “五岳杯”量子計算挑戰賽,是國內專業的量子計算大賽,也是玻色量子首次聯合移動云、南方科技大學共同發起的一場“企校聯名”的國際競賽,旨在深度融合“量子計算…

Python處理Excel文件并與數據庫匹配做拼接

Python處理Excel文件并與數據庫匹配做拼接 需求:Python處理Excel中數據并于數據庫交互匹配得到賬號信息等其他操作 Python實現 import os import pandas as pd import pymssql import warnings import time# 提取速率函數 def extract_broadband_speed(speed):if…

【外觀模式】SpringBoot集成mail發送郵件

前言 發送郵件功能,借鑒 剛果商城,根據文檔及項目代碼實現。整理總結便有了此文,文章有不對的點,請聯系博主指出,請多多點贊收藏,您的支持是我最大的動力~ 發送郵件功能主要借助 mail、freemarker以及rocke…

Java 泛型相關知識

什么是泛型? Java 泛型(generics)是JDK5中引入的一種參數化類型特性。 為什么使用泛型,使用泛型的好處? 代碼更健壯(只要編譯期沒有警告,那么運行期就不會出現 ClassCastException)代碼更簡潔(不用強轉)代碼更靈活,復用什么是參數化類型: 把類型當參數一樣傳遞<…

C語言絕對值得一看的常識講解:柔性數組補充篇

今天突然看到一個比較特別的知識點——柔性數組。它是在C99中出現的一種特別的數組&#xff0c;具體是指結構體中的最后一個元素允許是未知大小的數組&#xff0c;這就叫做『柔性數組』成員。 目錄 1.柔性數組的定義 2.柔性數組的特點 3.柔性數組的使用舉例 4.柔性數組的優…

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筆記(一)基礎

VUE 官方文檔&#xff1a;https://cn.vuejs.org/ 創建VUE項目 前提&#xff1a;已安裝 16.0 或更高版本的 Node.js 進入要創建的目錄&#xff0c;執行命令&#xff1a;npm create vuelatest 安裝依賴&#xff0c;啟動&#xff1a; //進入項目目錄&#xff0c;運行命令安裝依賴…

基于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;是一次偉大的革命。迪…