go语言支持开发桌面级应用吗?(求个编译器)go 可以开发桌面应用,但并不是很舒适 。
可以使用的GUI库有:
1、goqt,LiteIDE作者出品 , Go和QT的绑定 , 还未发布
2、go.uik , 纯Go实现的并发UI工具
3、walk,Windows Application Library Kit
4、gform,Windows GUI framework
目前的话walk用得比较多
不过go的GUI库用起来没有C#、C/C的那么顺手 。
这个问题不久之后应该会有所改善,毕竟用Go开发桌面的需求在不断增加 。
目前我采用的是用go http 做后端,Webkit HTML5 做界面,表现力很好,前端不需要学习新知识,一般的管理类应用都能搞定 。
go编译android.so无法引用可以尝试使用其安卓go语言编译工具他编译工具 。根据查询相关公开信息显示安卓go语言编译工具 , 安卓go语言编译工具你可以使用来编译Androidso库,并将它们链接到Go语言代码 , 但是,有时在使用Go编译Androidso库时会遇到引用问题,为安卓go语言编译工具了解决这个问题,安卓go语言编译工具你可以尝试使用其他编译工具,例如Clang或其他编译器 。
如何Golang开发Android应用环境配置好复杂,我不得不唠叨几句 。
需要下载golang1.4rc版,下载ndk , 然后编译 。然后用go get 下载gobind这个工具 , 然后 , 将写好的代码用gobind转化下,然后使用特殊的编译命令,将代码编译成.so文件 , 将生成的相关文件,放到android studio的项目中 。然后java代码中,利用jni调用引用的代码 。
... 好,接着往下看吧 。
环境准备
一台Linux 64的机器
一个带有AndroidStudioIDE的开发机器
因为环境配置实在复杂,所以我们引入的docker 。
docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash
cd example; echo "view example projects
docker起来之后,什么就都配置好了,NDK啦,java啦,GO的环境变量了,等等,并且还预装了vim,gradle,tmux,git,syncthing,svn
开始写代码
写代码之前,先约定下目录结构
go的代码都放在src/golib下 , 编译使用make.bash编译脚本,看下这个文件树
.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go编译生成的so文件
|`-- libgojni.so
|-- main.go_tmpl # 一个模板文件,先不用管它
|-- make.bash # 编译脚本 , 用来生成.so和Java代码
`-- src
|-- golib
||-- hi
|||-- go_hi?0?2?0?2?0?2 # 自动生成的代码
|||`-- go_hi.go
||`-- hi.go # 需要编写的代码
|`-- main.go
`-- main
|-- AndroidManifest.xml
|-- java
||-- go # 自动生成的代码
|||-- Go.java
|||-- Seq.java
||`-- hi
||`-- Hi.java
|`-- me/shengxiang/gohello # 主要的逻辑代码
|`-- MainActivity.java
`-- res
我已经写了一个例子,先直接搞下来
编译下,试试行不行(就算不行问题应该也不大 , 因为大问题都被我消灭了)
cd GoHello/app
./make.bash
../gradlew build
一切顺利的话在build/outputs/apk下应该可以看到app-debug.apk这个文件 。(剧透下,这个文件只有800多K)
编译好的我放到qiniu上了,可以点击下载看看
下面可以尝试改改,我抛砖引玉说下
打开hi.go这个文件
hi.go的内容,比较简单 , 我们写Go代码主要就是这部分
// Package hi provides a function for saying hello.
package hi
import "fmt"
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
return "(Go)World"
}
文件末尾添加下面这行代码
func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}
使用./make.bash重新编译下
打开MainActivity.java 修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome("yourname");
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
编译运行下,把生成的apk安装到手机上试试 。
原理解读(有兴趣的接着看)
首先说下gobind这个工具 。
go_hi/go_hi.go这个文件时通过gobind这个工具生成的,用来配合一个简单的程序,生成.so文件
// go_hi.go
package go_hi
import (
"golang.org/x/mobile/bind/seq"
"example/hi"
)
func proxy_Hello(out, in *seq.Buffer) {
param_name := in.ReadUTF16()
hi.Hello(param_name)
}
func init() {
seq.Register("hi", 1, proxy_Hello)
}
这个简单的程序内容是这样的
// main.go
package main
import (
"golang.org/x/mobile/app"
_ "golang.org/x/mobile/bind/java"
_ "example/hi/go_hi"
)
func main() {
app.Run(app.Callbacks{})
}
src/MyActivity.java文件内容是这样的
import ...
import go.Go; // 引入Go这个包
import go.hi.Hi; // gobind生成的代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Go.init(getApplicationContext()); // 初始化两个线程
Hi.Hello("world");
}
}
其中有一句Go.init(...)这里再看go.Go这个包是什么样子的
public final class Go {
// init loads libgojni.so and starts the runtime.
public static void init(Context context) {
... 判断该函数是否该执行的代码 -- 省略 --
System.loadLibrary("gojni"); // gojni需要这句
new Thread("GoMain") {
public void run() {
Go.run(); // run()是一个native方法
}
}.start();
Go.waitForRun(); // 这个也是一个native方法
// 这部分可以理解为,启动了一个后台线程不断的接收结果到缓存中 。
new Thread("GoReceive") {
public void run() { Seq.receive(); }
}.start();
}
private static boolean running = false;
private static native void run();
private static native void waitForRun();
}
MyActivity.java中还有段代码是 Hi.Hello("world");,打开Hi.java路径在src/go/hi/Hi.java,这个文件也是gobind生成的 , 是用来给java方便的调用.so文件
// Hi.java
// File is generated by gobind. Do not edit.
package go.hi;
import go.Seq;
public abstract class Hi {
private Hi() {} // uninstantiable
public static void Hello(String name) {
go.Seq _in = new go.Seq();
go.Seq _out = new go.Seq();
_in.writeUTF16(name);
Seq.send(DESCRIPTOR, CALL_Hello, _in, _out); // 下面接着说
}
private static final int CALL_Hello = 1;
private static final String DESCRIPTOR = "hi";
}
Seq.send这部分实际上最终调用的是一段go代码
func Send(descriptor string, code int, req *C.uint8_t, reqlen C.size_t, res **C.uint8_t, reslen *C.size_t) {
fn := seq.Registry[descriptor][code]
in := new(seq.Buffer)
if reqlen0 {
in.Data = https://www.04ip.com/post/(*[maxSliceLen]byte)(unsafe.Pointer(req))[:reqlen]
}
out := new(seq.Buffer)
fn(out, in)
seqToBuf(res, reslen, out)
}
如何用Go语言开发Android应用Go 语言是一个试图结合动态类型和静态类型,编译效率和安全性以及语言的易用性等众多特性与一体的一种尝试 。他的另一个目标是支持现代的基于网络的、基于多核的计算 。最后,Go 还是非常快的 , 他可以在单个计算机上仅仅花费几秒时间构建一个庞大的应用程序 。使用GO语言开发android语言步骤如下:
1. 下载安装Go语言(版本1.5 )
Golang链接
回到顶部
2. 下载安装 gomobile
下载
$ go get golang.org/x/mobile/cmd/gomobile
安装(需要等待几分钟)
gomobile init
回到顶部
3. Golang开发手机应用有两种方式
a. 原生应用开发
$ go get -d golang.org/x/mobile/example/basic
主要应用领域:
应用控制管理与配置
OpenGL ES 2 绑定
Asset 管理
Event 管理
试验中的包,含有OpenAL 绑定、音频、字体、图形以及运动传感器
Android开发
$ gomobile build -target=android golang.org/x/mobile/example/basic
此命令会生成名为basic的apk安装包
$ gomobile install golang.org/x/mobile/example/basic
此命令将安装apk包到已连接的android设备
在安卓平台上安装 GCC 的方法?android上安装GCC的步骤:
1、准备文件:Terminal IDE.apk和GCC源文件 。
2、解压整个ZIP文件 , 并先将Terminal.apk文件安装至手机中,然后把GCC整个文件一起放置到data/data/com.spartacusrex.spartacuside/files/system中 。
3、修改data/data/com.spartacusrex.spartacuside/files/目录下的.bashrc文件,添加以下代码:
export CPLUS_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/c/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/include:$C_INCLUDE_PATH
export PATH=$IDESYSTEM/gcc/bin:$PATH
4、将gcc/bin下的文件改一下名 , arm-linux-androideabi-g改为g,arm-linux-androideabi-gcc则改为gcc 。
5、完成后重启IDE即可使用GCC 。
gcc(GNU编译器套件):
GNU编译器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端 , 也包括了这些语言的库(如libstdc、libgcj等等) 。GCC的初衷是为GNU操作系统专门编写的一款编译器 。GNU系统是彻底的自由软件 。此处,“自由”的含义是它尊重用户的自由 。
创作背景:
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器 。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分 。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows 。[2]GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布 。
GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言 。GCC 很快地扩展 , 变得可处理C。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection) 。
【安卓go语言编译工具 安卓go语言编译工具怎么用】关于安卓go语言编译工具和安卓go语言编译工具怎么用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 母婴店如何推广产品的,母婴店推广活动方案
- js时间的加减和比较,js比较时间大小
- js获取字符串中a标签属性值,js获取字符ascii
- 博学谷java案例代码,博学谷javaee就业班
- mysql怎么存储大文件 mysql 文件大小
- 关于ios12苹果多任务下面显示的信息
- 手机appcss样式,app css
- 格斗游戏特殊动作,格斗动作角色游戏
- 怎么把日期插入mysql 如何将日期嵌入数据中