当前位置: 首页 > 科技观察

使用Go进行iOS和Android编程

时间:2023-03-15 01:36:27 科技观察

虽然Go不是一门新语言,但Go在过去两年中添加了许多有趣的功能,并且使用该语言的知名项目的数量正在迅速增长。我写了一篇关于SitePoint使用的编程语言的文章,其中提到了移动支持,所以我想我应该研究一下可能性。我很高兴Android支持Go语言。一方面,两者都应该是谷歌的技术。另一方面,恐怕也与开发者希望用Go取代Java有关。要开始,您需要安装Golang1.5+。接下来,您需要安装GoMobile工具来编译和运行Android和iOS应用程序:gogetgolang.org/x/mobile/cmd/gomobilegomobileinit我们将参考gomobile包中的示例,位于GoLangInstalldir/src/golang.org/x/手机/例子/。如果您没有安装这些示例,请参考以下命令安装:goget-dgolang.org/x/mobile/example/basic构建和安装GoNative应用程序对于许多应用程序,在编译GoNative应用程序时,忽略那些平台-dependent库和接口是可以接受的。如果是这种情况,编译现有的Go代码是微不足道的,我们可以选择使用功能的子集,包括:App控制和配置OpenGLES2资源管理事件管理实验包,包括OpenAL、音频、字体、精灵和运动sensor我们将从现有的gomobile项目中的一些示例开始,您可以将它们替换为您自己项目中的文件。Android构建一个AndroidAPK包gomobilebuild-target=androidgolang.org/x/mobile/example/basic部署到设备gomobileinstallgolang.org/x/mobile/example/basiciOS构建一个iOSIPA包gomobilebuild-target=iosgolang.org部署/设备的x/mobile/example/basic与Android不同。对于iOS,没有统一的部署命令。您需要以熟悉的方式将包复制到设备或模拟器,例如使用ios-deploy工具。您可以使用上述步骤,试试这个示例golang.org/x/mobile/example/audio。我们再深入看一下音频示例(详细代码就不列出来了),不需要你对Go语言非常精通(我不是很精通),先了解一下我们能做什么。首先,您可以看到一些导入语句:import(..."golang.org/x/mobile/app""golang.org/x/mobile/asset"...)如果您查看导入包的位置位于GoLangInstalldir/src/golang.org/x/mobile/*目录下的文件中,你可以找到编译到你的代码中的Java和Objective-C文件。再深入一点,您可以在代码中找到对这些导入包(例如app和glctx)的引用。GoingNative我们可以使用Go来编写代码,然后构建一个紧凑优化的原生应用,但目前这个应用还不是完全原生风格的,因为所有的依赖库仍然是Java或者Objective-C/Swift。我们如何改善这种体验?GoMobile团队为我们提供了另一种选择,可以在本机应用程序中使用Go包(即您的程序)。尤其是分享一些常用的Go代码,将它们绑定到native代码上是很有用的。这种方法上手快,但长期维护起来会比较麻烦。如果你使用AndroidStudioforAndroid,可以导入项目GoLangInstalldir/src/golang.org/x/mobile/example/bind/android,打开build.grade(hello模块)文件,更新GOPATH和GO的路径.以下是我的文件内容(我用Homebrew安装了GoLang):同步Gradle后,就可以将应用部署到模拟器或真机上了。注意:目前该方法仅支持基于ARM的设备和模拟器。让我们看看Java和Go的代码:MainActivity.javapackageorg.golang.example.bind;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;importgo.hello.Hello;publicclassMainActivityextendsActivity{privateTextViewmTextView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView=(TextView)findViewById(R.id.mytextview);//CallGofunction.Stringgreetings=Hello.Greetings("AndroidandGopher");mTextView.setText(问候语);}}src/golang.org/x/mobile/example/bind/hello/hello.gopackagehelloimport"fmt"funcGreetings(namestring)string{returnfmt.Sprintf("Hello,%s!",name)}通过importgo.hello.Hello导入对应的go文件,Java代码中可以通过Hello.Greetings调用文件中的Greetings函数。不需要太复杂的步骤,就可以在go函数和原生UI元素之间建立绑定关系。iOS直接将iOS应用程序与Go程序捆绑在一起需要不同的步骤。首先,您需要运行以下命令:cdGoLang_Install_dir/src/golang.org/x/mobile/example/bindgomobilebind-target=iosgolang.org/x/mobile/example/bind/hello这将创建一个名为Hello.framework的文件当前目录包,可以在项目中使用。在位于GoLangInstalldir/src/golang.org/x/mobile/example/bind/ios/bind.xcodeproj的Xcode中打开示例iOS项目,将Hello.framework拖到项目中,并在必要时选择“复制项目”。目录结构现在看起来像这样:构建并运行应用程序(更像是Android应用程序),我们可以看到在Objective-C代码中进行的Go函数调用。看一下现在的代码:#import"ViewController.h"#import"hello/Hello.h"//Gomobilebindgeneratedheaderfileinhello.framework@interfaceViewController()@end@implementationViewController@synthesizetextLabel;-(void)loadView{[superloadView];文本标签。text=GoHelloGreetings(@"iOSandGopher");}@end#import"hello/Hello.h"引入之前生成的框架,textLabel.text=GoHelloGreetings(@"iOSandGopher");调用它公开的函数来设置标签的值。也可以在同一个自动生成的基于Swift的项目中使用Objective-C框架,像这样:letmsg=Hello.GoHelloGreetings("gopher")值得吗?好吧,简单地说,这可能不值得。如果你已经在使用Go编写应用程序并且不关心应用程序是否是原生的,那么你可以放手继续做,因为你已经知道构建和部署用Go编写的原生应用程序非常简单。如果您打算花更多的精力来尝试绑定,您可以走得更远,但它仍然需要一点控制。如果您不使用Go,那么在开发本机移动应用程序时不值得考虑使用Go。但是,我有一种强烈的预感,即在不久的将来,Go将成为这方面的潜在选择。***欢迎您提出建议和意见。