APP下载

Go 1.11来了!可将Go程式码编译为WebAssembly

消息来源:baojiabao.com 作者: 发布时间:2024-04-20

报价宝综合消息Go 1.11来了!可将Go程式码编译为WebAssembly

在今年4月,Go官方就预告即将支援Go编译成WebAssembly,一展取代Javascript的野心,而这个功能就在上周五释出的最新版本Go中实现了,虽然1.11是个小更新,但除了WebAssembly的支援外,也加入了模组概念,另外还更新了工具链、Runtime和函式库。

Go 1.11新加入了模组的概念,这是整合了版本控制以及套件发布的GOPATH替代方案。使用模组,开发者不再受局限于GOPATH中工作,版本相依成为外显资讯并且更加轻量,程式建置也将更可靠,并且具可重复性。目前模组支援仍在实验阶段,存在一些已知的问题正待解决,也会根据使用者的回馈进行改进,因此细节可能发生变化,虽然如此,但官方承诺,在Go 1.11转换使用模组的专案,将能在Go 1.12或更高版本中继续运作。

因为Go模组的支援,在命令列中@符号被指派了特殊意义,因此Go命令现在不允许使用包含@符号的导入路径,由于Go Get本来就无法使用这样的导入路径,所以这样的限制只会影响由其他方法建置客制化GOPATH树的专案。

在WebAssembly编译功能支援方面,现在Go 1.11增加了一个WebAssembly实验性埠口,Go程式现在可以编译成一个WebAssembly模组,该模组包含goroutine 调度、垃圾回收与Maps等功能的Go Runtime,整体大小约在2MB左右,压缩后可下降到500KB。Go程式现在可使用新的实验性syscall/js套件呼叫JavaScript。由于新增了GOOS值js以及GOARCH值wasm,除了那些正在被使用GOOS/GOARCH值外,Go工具现在会忽略名为*_js.go或*_wasm.go的Go档案。使用者需要重新命名不符合规则的档案名称。

Go 1.11的编译器现在会为最佳化的二进制档案提供更为精准的除错资讯,包含变数位置资讯、行数以及中断点位置,这将能在不使用-N -l的情况下,为编译的二进制档除错,不过这些除错资讯仍有其限制,有些是根本上的限制,官方提到,将会在未来继续修正除错功能。

Runtime更新的部分,现在使用稀疏堆积布局(Sparse Heap Layout),因此堆积将解除之前512GiB的大小限制,而这也解决了Go/C二进制档或以-race编译的二进制档,在少数情况会出现的位置空间冲突错误。官方提到,更新到Go 1.11,绝大多数的应用程序效能都会提升,但是很难直接说是哪一个改进造成的,因为Go新版本在程式码生成以及核心函式库的最佳化,都是效能提升的推手。

而官方在Go 1.10释出时,就曾公告支援的操作系统版本将提升,因此Go 1.11现在需要OpenBSD 6.2或更高版本,macOS 10.10 Yosemite或更高版本,以及Windows 7或更高版本,对较旧版本的操作系统将不再支援。

2019-01-21 03:34:00

相关文章