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

l1_rdinary_x · 2022-01-15 19:54:05 · 6802 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-01-15 19:54:05 的主题,其中的信息可能已经有所发展或是发生改变。

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

6802 次点击  ∙  2 赞  
加入收藏 微博
6 回复  |  直到 2022-01-17 13:09:31
focusonline
focusonline · #1 · 3年之前

如果要做UI 有好多其他更好的选择, 为啥一定要选择go?

l1_rdinary_x
l1_rdinary_x · #2 · 3年之前

golang网络功能强大,godot发展潜力巨大,用golang开发,有时也有桌面程序开发需求,不如与godot两强配合,天下无敌、方便又快捷。一般应用开发都轻松应对。无需为个gui再重新学个编程语言。

focusonline
focusonline · #3 · 3年之前

其实吧... 我觉得如果说开发UI方便快捷哪个也不如可视化拖控件方便快速, 对于golang这种本身就很新的语言来说, 学会了golang大多已经会其他语言了, 而且学一门新的语言真的不叫事.

liangmanlin
liangmanlin · #4 · 3年之前

很早就关注过,是个不错的东西

l1_rdinary_x
l1_rdinary_x · #5 · 3年之前

godot可以很完美的进行可视化拖拉控件,所见即所得,这也是godot最基础、最简单的功能,非常的方便、简单,可以快速的出产品。

jarlyyn
jarlyyn · #6 · 3年之前

想法不错,虽然我一般都习惯直接上nw.js啥。

如果真的要做复杂展示,应该是一个好办法

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传