go语言的一个功能强大,所见即所的跨平台gui

l1_rdinary_x · · 6559 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

go语言的一个功能强大,所见即所的跨平台gui golang本身没有gui发布功能,使用golang开发桌面程序,试用了很多gui库如flyne、govcl、walk等都不满意,在找寻试用go的gui时,看到了一个功能强大、小巧简单的潜力巨大的新兴开源godot游戏引擎,可以进行图形程序开发。不用怀疑,godot程序本身就是用godot游戏引擎开发的,图形程序界面开发只是其中的一个基础功能。界面设计只需拖拉节点控件,所见即所十分强大、方便。godot可跨平台导出,可发布到android、ios、html5、mac osx、linux、uwp、windows。编程语言官方支持c++、c#,社区支持有rust、go等。 godot本身的脚本语言gdscript非常简单、强大、性能好,比Python还容易,godot本身的脚本语言visualscript支持拖拉编程。godot功能强大、齐全,还要什么自行车呀。 想了一下现在程序开发不流行前、后端分离吗。如果用godot本身的tcp、WebSocket、WebRTC等协议功能与golang结合,如用godot做前端,golang做后端,使用godot调用golang或golang调用godot,不是两强结合吗?试写了一些程序,超出预期非常完美。执行程序与正常程序一样,根本感觉不出来与常规程序的差异。 好东东需分享,最简单的应用方式为直接用godot本身的脚本语言gdscript,与golang配合。最简单使用方式举例如下: 1、使用http联接godot与golang。 (1)godot本身的gdscript函数代码如下: ``` func _make_post_request(url, data_to_send, use_ssl): #注:HTTPRequest默认 headers:Content-Type: application/json 。参数data_to_send参数为要传递的数据。 var headers = [] var use_ssl = ture #注:例为本地应用,如发布为html5,需改 url var url= “http://127.0.0.1:8086/s1” $HTTPRequest.request(url, headers, use_ssl, HTTPClient.METHOD_POST,data_to_send) ``` (2)golang端代码如下(使用gin为例): ``` package main import ( "github.com/gin-gonic/gin" ) type rs struct { Weight float64 `json:"weight"` Slope float64 `json:"slope"` Length float64 `json:"length"` } func main() { r := gin.Default() //导出html5时跨域 r.Use(Cors()),跨域函数Cors()不再举例 r.POST("/s1", func(c *gin.Context) { rss := rs{} c.BindJSON(&rss) } //rss接受godot传来的数据。 r.Run(":8086") //下面代码省略 ......... } ``` 2、将golang编译为linux或windows程序。注意编译windows程序,需编译为无窗口模式,编译时加参数-ldflags="-H windowsgui"。以编译stmain.go文件为例编译方式如下: windows下编译: ` CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -v -ldflags="-H windowsgui -w -s" stmain.go ` linux 下编译: ` CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build stmain.go ` 注:如go import的库 无C代码 则编译不用加CC=x86_64-w64-mingw32-gcc 3、将编译生成的linux格式的stmain文件或windws格式的stmain.exe文件,godot项目根目录中。 4、使用godot本身的gdscript调用golang程序 ```` func _ready(): #调用golang的stmain程序 pid = OS.execute("./stmain", [], false) OS.set_window_maximized(true) #关闭主程序时,自动关闭stmain。 func _notification(what): if what == NOTIFICATION_WM_QUIT_REQUEST: var sk = OS.kill(pid) ```` 5、用godot导出linux或window平台,在导出对话框内“筛选导出非资源文件或文件夹”下的输入框中填入stmain或stmain.exe,以将go程序一并打包。 6、如打包后无法运行,其错误可能是:**ERROR** OS_Unix::execute - Could not create child process while executing: ./stmain。这说明godot未能加载stmain文件,这个问题官方原已解决,如再出现可向官方提个bug。现解决方式可很简单处理,将stmain或stmain.exe再复制一份到打包后的根目录内与运行程序同一目录即可。 7、大功告成,请执行程序,享受强大与方便吧。 注:godot官网:https://godotengine.org/ godot官方中文档https://docs.godotengine.org/zh_CN/latest/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6559 次点击  ∙  2 赞  
加入收藏 微博
6 回复  |  直到 2022-01-17 13:09:31
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传