GoMobile现为google实验项目,尚未提供用户最终版。支持ios & android双平台,支持全部用go来写app (all-Go app),
(all-Go app目前仅支持OPEN GL绘制界面),支持java、Object-C互调 (go libraries).
github: github.com/golang/mobi…
wiki: github.com/golang/go/w…
gobind: godoc.org/golang.org/…
GoMobile配置
默认Go环境已配置完成, Go环境配置不再赘述。
自动安装
$ go get golang.org/x/mobile/cmd/gomobile
坑:需科学上网,可能会校验证书失败,笔者在公司网络未能成功下载。
手动安装
download
下载成功后改文件名为mobile, copy到$GOPATH/src/golang.org/x/
$ git clone https://github.com/golang/mobile
build
build gomobile成功后会在$GOPATH/bin目录生成gomobile可执行程序,(执行过程中可能出现权限被拒,添加对应权限即可),copy gomobile程序至/usr/local/go/bin/目录,即可执行gomobile命令。
$ go build golang.org/x/mobile/cmd/gomobile
init
初始化环境,自动下载安装依赖,需要翻墙,可能会提示权限被拒,添加对应文件权限。
$ gomobile init
config ndk
可能会提示” No android NDK path is set “错误。解决办法如下:
因gomobile init未同时下载ndk,所以需要手动下载ndk环境,然后执行
$ gomobile init -ndk ~/Library/Android/sdk/ndk-bundle/
末尾路径为ndk安装路径,针对自己安装目录选择。
All-GO APP
google demo, 源码目录: golang.org/x/mobile/example/basic
编译 Android Demo
$ gomobile build -target=android golang.org/x/mobile/example/basic
运行 Android Demo
确认adb已经识别手机
$ gomobile install golang.org/x/mobile/example/basic
安装成功后,即可打开一个随手势移动的三角形程序。
Go Libraries
google demo, 源码目录: golang.org/x/mobile/example/bind/
android目录为android studio project, hello目录为go libs源码
Go libs创建
GOPTAH中创建libs目录存放go源码 [对应demo中golang.org/x/mobile/example/bind/hello]
// 网络请求,输入url,返回responsepackage helloimport ( "fmt" "net/http" "io/ioutil")func Greetings(url string) string { resp, err := http.Get(url) if err != nil { return fmt.Sprintf("error: %s", err) } b, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { return fmt.Sprintf("error: %s", err) } return fmt.Sprintf("Hello, %s!", b)}
android配置
Libs Module
创建libs module[对应demo中golang.org/x/mobile/example/bind/android/hello],app module对其依赖
libs module建立go源码依赖, build文件配置如下
/* bind 插件 */plugins { id "org.golang.mobile.bind" version "0.2.6"}gobind { /* go libs 目录 */ pkg = "golang.org/x/mobile/example/bind/hello" /* gopath 目录 */ GOPATH = "/Users/hangsong/go" /* gobin 目录 */ GO = "/usr/local/go/bin" /* gombile 目录 */ GOMOBILE = "/usr/local/go/bin/gomobile"}
App Module
build完成后,在MainActivity调用go libs代码
package org.golang.example.bind;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import hello.Hello;
public class MainActivity extends Activity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.mytextview);
// Call Go function.
String greetings = Hello.greetings("http://baidu.com");
mTextView.setText(greetings);
}
}
添加联网权限,程序run起来后,将能看到网络返回信息显示.
总结
go语言已在服务端大放异彩,七牛、头条、阿里已经证明了go的先天优势,
代码简洁,格式统一,语法简练,多核心高并发,
提高开发效率的同时,兼备媲美C,C++的运行速度,势必会成为下一代经典语言!
现阶段go在移动领域仅支持OpenGl绘制界面,仍无法撼动java,Object-C地位,
但是有着google的加持,相信不久的将来在android领域会替换java,被人诟病的android响应速度,定会得到质的提升!