日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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語言 overflow 網絡編程
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定