Go 1.11 正式發布 支持模塊和WebAssembly

美國當地時間8月24日,Go 開發團隊宣佈推出 Go 1.11 正式版。

Go 1.11 正式發佈 支持模塊和WebAssembly

下載地址 >>> https://golang.org/dl/ or https://golang.google.cn/dl/(免梯子)

看看有哪些值得關注的更新 ——

新版本在工具鏈、運行時和庫都有許多變化和改進。當然,兼容性方面依然會兼容舊版本。此外有兩個最值得關注且激動人心的新特性 —— 對模塊(modules)和 WebAssembly 的支持。

Go Modules

此版本增加了對被稱作“模塊(Go Modules)”的初步支持,這是 GOPATH 的替代方案,集成了對版本控制和軟件包分發的支持。該功能目前仍處於實驗性階段,並且仍有一些可能會影響使用的問題,因此請隨意使用問題跟蹤器進行反饋或查閱解決方案。

WebAssembly

Go 1.11 還為 WebAssembly (js/wasm) 添加了一個處於實驗性階段的端口。它使得開發者可將 Go 程序編譯為與四個主流 Web 瀏覽器兼容的二進制格式。可以在 webassembly.org 上閱讀有關 WebAssembly(縮寫為"WASM")的更多信息。

Go 程序現在可被編譯為一個 WebAssembly 模塊,該模塊包括用於 goroutine 調度、垃圾收集、映射等的 Go 運行時。因此,生成的模塊大小約為 2MB,或壓縮後為 500KB 左右。Go 程序也可以使用新的實驗性 syscall/js 包調用 JavaScript。有關二進制包大小和與其他語言互操作的問題尚未成為優先處理事項,不過會在將來的版本中得到解決。

下面和大家分享如何在Go語言中使用WebAssembly。先安裝好Go1.11+版本的Go語言環境。然後創建hello.go文件:

package main

import "fmt"

func main() {

fmt.Println("你好,WebAssembly!")

}

為了不瞭解Go語言的同學便於理解,讓我們簡單介紹一下程序。第一句表示當前的包名字為main,同時包中有一個main函數,而main包的main函數就是Go語言程序的入口。在main函數中通過導入的fmt包內的Println方法輸出了一個字符串。然後在命令行中直接輸入go run hello.go來運行程序。如果一切正常的話。應該可以在命令行看到輸出"你好,WebAssembly!"的結果。

Go1.11開始支持WebAssembly,對應的操作系統名為js,對應的CPU類型為wasm。目前還無法通過go run的方式直接運行輸出的wasm文件,因此我們需要通過go build的方式生成wasm目標文件,然後通過Node環境執行。需要注意的是更新的Node版本對wasm的支持會更好,作者推進使用v10以上的版本。

通過以下命令將hello.go編譯為a.out.wasm:

$ GOARCH=wasm GOOS=js go build -o a.out.wasm hello.go

生成的a.out.wasm文件體積可能超過2MB大小。而且生成等a.out.wasm還無法直接運行,需要初始化Go語言必須的運行時環境。

對運行時初始化是一個相對複雜的工作,因此Go語言提供了一個$(GOROOT)/misc/wasm/wasm_exec.js文件用於初始化和運行的工作。同時提供了一個基於node包裝的$(GOROOT)/misc/wasm/go_js_wasm_exec腳本文件,用於執行Go語言生成的wasm文件。

參考go_js_wasm_exec腳本的實現,我們可以直接使用wasm_exec.js來運行wasm模塊。我們可以先將wasm_exec.js文件複製到當前目錄,然後通過以下命令運行wasm模塊:

$ node wasm_exec.js a.out.wasm

你好,WebAssembly

現在終於可以正常運行Go語言生成wasm程序了。因此以後可以使用Go語言來開發Web應用了。

有關 Go 1.11 中變更的更多詳細信息,請參閱發行說明 >>> https://golang.org/doc/go1.1

本文出處:開源中國,WASM Hackers公眾號


分享到:


相關文章: