php小編小新很高興為您解答關於Go 1.21是否會包含透過WebAssembly託管HTTP的功能的問題。目前來說,Go 1.21版本還沒有正式發布,因此我們無法確定其中特定的功能。但是,根據我們對Go語言的了解,Go非常注重WebAssembly和網頁程式設計的發展,因此很有可能在未來的版本中加入透過WebAssembly託管HTTP的功能。這將為開發者提供更多靈活和高效的Web開發工具。我們建議您持續關注Go語言的官方發布訊息,以獲取最新的更新和功能。
問題內容
我想在 go 上透過 webassembly 嘗試 http 伺服器。我認為 go 1.20 不支援在瀏覽器之外編譯 go for web assembly,並且tinygo 中不包含 net/http 函式庫。
在閱讀https://stackoverflow.com/a/76091829(感謝@tachyonicbytes)後,我嘗試使用gotip
來完成此操作,但是每當我嘗試啟動伺服器(或任何阻塞/等待功能)時,我都會收到錯誤: 致命錯誤:所有goroutine 都在睡覺- 死鎖!
。我嘗試將事情轉移到帶有等待函數的 goroutine 中,但要么簡單地結束該函數,要么給出相同的錯誤。
這是我的運行方式:
go install golang.org/dl/gotip@latest gotip download goos=wasip1 goarch=wasm gotip build -o server.wasm server.go && wasm3 server.wasm
這是範例 server.go
:
package main import ( "fmt" "net/http" "sync" ) func main() { s := http.Server{ Addr: ":8080", Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) }), } fmt.Println("about to serve") var wg sync.WaitGroup wg.Add(1) go func() { err := s.ListenAndServe() if err != nil { fmt.Printf("Unable to serve: %v\n", err) } wg.Done() fmt.Println("serving stopped") }() wg.Wait() fmt.Println("started up server") }
那麼,這只是因為 go 1.21 是一個 wip,因為我無法理解啟動阻塞函數的正確方法,或者因為 go 1.21 不支援這種事情?
我嘗試在 intel mac 上的伺服器端 webassembly 運行器 wasm3 中啟動 go 伺服器。我期望它提供 http 服務,但發現它要么拋出錯誤,要么立即退出。
解決方法
很高興能為您提供協助!
不幸的是,wasm 網路似乎不會成為 go 1.21 的一部分。在 wasm 實現網路有點複雜。運行你的程式碼,我得到了這一行:
sdk/gotip/src/net/net_fake.go:229
經過檢查,它有以下免責聲明:
// Fake networking for js/wasm and wasip1/wasm. // This file only exists to make the compiler happy.
這樣做的困難在於 wasi 僅對套接字提供部分支持,因此 wasi 還沒有完整的 berkeley 套接字。
好消息是你實際上可以做http,但在tinygo中。 tinygo 對 go net/http
軟體包提供部分支持,其驅動程式.
如果你想看看它的一些實際用法,我目前正在嘗試移植這個 使用tinygo 專案到wasm。如果我沒記錯的話,我已經讓它工作了,但已經有一段時間了,我確信我還沒有完成轉換。也許暫時不可能。
另一件事是 wasm3
儘管有部分 wasi 實現,但可能沒有實現套接字部分。我建議也使用一些其他運行時,例如 @gedw99 建議的 wasmtime、wasmer、wasmedge 或 wazero。 wasmedge 對套接字有很好的支持,但就您而言,編譯器是實際上是問題所在。
以上是Go 1.21 會包含透過 WebAssembly 託管 http 的功能嗎?如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

golang ...

Go語言中如何對比並處理三個結構體在Go語言編程中,有時需要對比兩個結構體的差異,並將這些差異應用到第�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境