[译] 用 Go 语言来看 Android
关于本文
如今移动开发虽然三分天下,但主要市场还是 Android 和 IOS ,但是对于一些中小型公司来说单独开发的成本明显比较大。2014 年苹果推出了全新的语言 Swift ,而作为对头的 Google 也有一门自己独特的语言,那就是 Go 语言,Go 语言不仅能用来进行 Android 开发,而且也正在适配 IOS 平台,下面让我们来入个门吧。
文章内容
随着 Go 1.5 的即将发布,在 Android 和 IOS 上编译 Go 语言的代码正在被引进。你既可以完全用 Go 语言来写你的应用并用 opengl 来做 UI 界面,也可以写一个可以和原生的 Android 和 IOS 交互的 Go 类库。这为跨平台类库打开了大门,这让我激动不已。Google 为了确保用 Go 语言写出来的 apps 不会被 apple store 拒之门外而做了很多跑腿儿活,比如 Ivy 。
入门指南
让我们开始吧,首先你必须安装一个可运行的 go 1.5. 你可以从 源代码 编译或者使用一个之前 编译好的版本 。我在写这篇博客的时候在一台 Linux 机器上使用的是 的 go 1.5 beta2. 我注意到在 Windows 上面使用的时候在 Go 语言源代码里面会有一些警告信息,因此如果你正在使用 Windows 开发,这可能不会起作用。
一旦你要安装 Go 语言,你可以通过下面的命令行来安装:
go get golang.org/x/mobile/cmd/gomobile gomobile init
Android 平台:你需要安装 Android sdk 并且确保你的 adb 在你的环境变量里面,并且你的设备要能够使用 adb 调试。
IOS 平台:很不幸的是 IOS 并不是 100% 适配,因此可能不会有作用。通常在 IOS 上编译你需要安装 xcode 并写使用 OSX 系统。
安装一个示例
让我们看看可不可以编译并且安装一些 go 语言的代码。Google 已经提供了一些我们可以使用的 例子 。为了简便起见我这里只安装 android 版本(主要原因是因为我没有 IOS 设备)。
接下来的命令就会安装示例应用:
gomobile install golang.org/x/mobile/example/basic gomobile install golang.org/x/mobile/example/audio gomobile install golang.org/x/mobile/example/sprite
虽然看起来不多,但是我觉得这相当酷。上面的应用使用纯 go 语言写的,并且使用 opengl 来做渲染。目前还有一些 api 限制,但是我相信不久就会改善。
分析跨平台开发的应用
好,我们可以编译他人的代码,但是它在干什么?让我们看看在这个基本的示例应用里面发生了什么。
//excerpt from golang.org/x/mobile/example/basic func main() { app.Main(func(a app.App) { var c config.Event for e := range a.Events() { switch e := app.Filter(e).(type) { case lifecycle.Event: switch e.Crosses(lifecycle.StageVisible) { case lifecycle.CrossOn: onStart() case lifecycle.CrossOff: onStop() } case config.Event: c = e touchLoc = geom.Point{c.Width / 2, c.Height / 2} case paint.Event: onPaint(c) a.EndPaint() case touch.Event: touchLoc = e.Loc } } }) }
用 Go 语言写的应用会从 app 包里面调用主函数。在这里你可以定义应该发生什事件,你可以在 事件文档 了解更多细节。这些事件基于注册在应用里面的接口。
上面的代码遍历在事件频道里面所有的事件。配置事件定义了屏幕的大小,绘图事件正在绘制我们长方形的颜色。点击事件改变了长方形的位置,生命周期事件构造或者析构这个基于应用焦点的项目。
更多阅读
我希望我已经激起了你的兴趣,研究 Go 语言可以参考这些文章。
所有的示例都可以在这里找到 http://golang.org/x/mobile/example
在这里可以找到文档 https://godoc.org/golang.org/x/mobile
源代码在这里 https://github.com/golang/mobile
更多IT技术干货:wiki.jikexueyuan.com
加入极客星球翻译团队: http://wiki.jikexueyuan.com/project/wiki-editors-guidelines/translators.html
版权声明:
本译文仅用于学习和交流目的。非商业转载请注明译者、出处,并保留文章在极客学院的完整链接
商业合作请联系 wiki@jikexueyuan.com
原文地址: http://www.codingvelocity.com/2015/07/23/go-mobile-intro.html