在 Go 1.3 发布 6 个月之后,Google宣布发布Go 1.4。Go 1.4 正式支持Android 原生开发,不过这方面的工作还处于繁重的开发之中。该版本还改进了垃圾收集器,语言方面也有少许变化。
InfoQ 数月前曾报道过,Google 的工程师正在为支持用Go 语言开发原生Android 应用而努力。随着Go 1.4 的发布,向Android 进行实验性移植的草案已经成为现实,Google 的Go 团队的工程师Andrew Gerrand 介绍说,“仅使用Go 代码编写简单的Android 应用已经成为可能”。
对Android 的支持是通过 golang.org/x/mobile 库实现的,其中包括用于生成语言绑定的包(支持从 Java 调用 Go 代码),还有用于创建一个完整的原生应用的包,再就是一些例子,以及到 OpenGL 的绑定。
值得一提的是,Google 的计划并非是基于 Go 提供完整的 Android NDK,而只是支持用 Go 编写 Android 应用的一部分。发布说明中提到:
提供的接口主要针对的是游戏。我们期望的是应用在整个屏幕上绘制(通过 OpenGL,参见 go.mobile/gl 包),不会暴露平台屏幕管理基础设施的任何信息。在 Android 上,这意味着一个原生应用等价于 iOS 上一个单独的 Activity(特别是 NativeActivity) ,一个单独的 UIWindow。触屏事件也可以通过这个包获得。当 Android 支持脱离预览版状态后,Android NDK 支持的所有 API 都将通过一个 Go 包暴露出来。
此外,Andrew 还提到:
在这一阶段,支持库仍然是刚刚起步,还处于繁重的开发之中。早期的使用者应该会遇到不少问题,我们也欢迎社区参与进来。
Go 1.4 在改进垃圾收集器方面也做了很多工作,为将在后面的版本中唱主角的完全并发的收集器打下了基础。此外,现在的栈在必要时会重新分配,以保证连续性,并消除众所周知的“热栈分割( hot stack split )”问题。
工具方面也有改进,go 命令现在支持构建时生成源代码。Andrew 提到,利用该特性,可用使用新的 stringer 工具为类型常量自动生成 String 方法。
最后,Go 1.4 还对语言做了一些修改,它们是:
- 新的 for-range 循环形式,支持用
代替
for i := range x {
…
}
- 禁止在 **T 上调用方法,像 Go 语言的之前版本支持以下形式的方法调用:
type T int
var x **T
x.M()
这种调用方法并不符合 Go 语言规范,规范只允许自动插入一个解引用(dereference)操作。依赖之前行为的代码不能通过编译,但是也很容易修复,只需要显式地对变量解引用。
更多细节,请参考发布说明。
查看英文原文: New Go 1.4 Adds Support for Android, Improves Garbage Collection
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论