轻松入门:使用Golang开发跨平台GUI应用

 更新时间:2023年10月11日 15:33:56   作者:raoxiaoya  
Golang是一种强大的编程语言,它的并发性和高性能使其成为开发GUI桌面应用的理想选择,Golang提供了丰富的标准库和第三方库,可以轻松地创建跨平台的GUI应用程序,通过使用Golang的GUI库,开发人员可以快速构建具有丰富用户界面和交互功能的应用程序,需要的朋友可以参考下

基础操作

requires:Go 1.11.x or later

安装依赖

go get github.com/lxn/walk
go get github.com/akavel/rsrc
rsrc

创建文件 go-gui/gui.go

package main
import (
	"strings"
	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)
func main() {
	var inTE, outTE *walk.TextEdit
	MainWindow{
		Title: "xiaochuan测试",
		MinSize: Size{600, 400},
		Layout: VBox{},
		Children: []Widget{
			HSplitter{
				Children: []Widget{
					TextEdit{AssignTo: &inTE, MaxLength: 10},
					TextEdit{AssignTo: &outTE, ReadOnly: true},
				},
			},
			PushButton{
				Text: "SCREAM",
				OnClicked: func() {
					outTE.SetText(strings.ToUpper(inTE.Text()))
				},
			},
		},
	}.Run()
}
go mod init go-gui

创建后缀为manifest的文件

go-gui/go-gui.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>
rsrc -manifest go-gui.exe.manifest -o rsrc.syso
go build -ldflags="-H windowsgui"

双击 go-gui.exe

在这里插入图片描述

文件go-gui.exe可以复制到任何地方直接运行,因为已经将manifest文件编译进去了。

添加图标

rsrc -manifest go-gui.exe.manifest -ico favicon.ico -o rsrc.syso
go build -ldflags="-H windowsgui"

favicon.ico为下载的图标文件,效果如下。

在这里插入图片描述

运行程序,任务栏上的图标也变成了这个。

具体说明

1、manifest 文件

这个东西的作用就是为了解决 以前windows上的“Dll 地狱” 问题才产生的新的DLL管理解决方案。大家知道,Dll是动态加载共享库,同一个Dll可能被多个程序所使用,而所谓“Dll 地狱”就是当不通程序依赖的Dll相同,但版本不同时,由于系统不能分辨到底哪个是哪个,所以加载错了Dll版本,然后就挂了。于是盖茨就吸取了教训,搞了一个程序集清单的东西,每个程序都要有一个清单,这个清单存再和自己应用程序同名的.manifest文件中,里面列出其所需要的所有依赖,这儿所列出的依赖可不是简单地靠文件明来区分的,而是根据一种叫做“强文件名”的东西区分的。。。。。。

2、rsrc程序的作用

rsrc - Tool for embedding binary resources in Go programs.
Generates a .syso file with specified resources embedded in .rsrc section,
  aimed for consumption by Go linker when building Win32 excecutables.
The generated *.syso files should get automatically recognized by 'go build'
command and linked into an executable/library, as long as there are any *.go
files in the same directory.
OPTIONS:
  -arch string
    	architecture of output file - one of: 386, amd64, [EXPERIMENTAL: arm, arm64] (default "amd64")
  -ico string
    	comma-separated list of paths to .ico files to embed
  -manifest string
    	path to a Windows manifest file to embed
  -o string
    	name of output COFF (.res or .syso) file; if set to empty, will default to 'rsrc_windows_{arch}.syso'

rsrc将静态资源文件编译到syso文件中,go语言在最新版本中已经支持syso文件的链接并且会搜索当前目录,自动链接。

在Go1.16起引入了embed包,也可以实现将静态文件编译进去。参考:https://www.php.cn/be/go/484192.html

本机安装的是Go1.14,没有办法演示使用 embed 的方式加载 manifest 文件。

当然,我们也可以不将 manifest文件编译进去,比如,我的目录下只有gui.go和go-gui.exe.manifest文件,然后使用go build -ldflags="-H windowsgui"来编译。得到go-gui.exe,注意,此时的manifest文件名一定要是go-gui.exe.manifest。点击go-gui.exe,效果一样,只是,go-gui.exe和go-gui.exe.manifest要在同一个目录下。

3、参数-ldflags="-H windowsgui"的意义

正常情况下,任何语言开发的GUI都会伴随着一个CMD框在后面,比如这样

在这里插入图片描述

是的,如果仅仅使用go build来编译的话,就是这个效果,带上参数-ldflags="-H windowsgui"就会去掉后面的CMD框。

这个CMD框的作用是打印信息,输出等。

另外,还可以压缩一下生成的程序的大小:-ldflags="-H windowsgui -w"

关于 golang GUI

win

win把win32 api几乎所有相关的声明都导成了go。如果发现有没导出的,可以参照里面的方法导出,很简单的。

walk

是对win包的再次封装,方便使用。

fyne

文档相对丰富一些。

govcl

总结:

  1. Golang是一种强大的编程语言,可以用于开发GUI桌面应用。
  2. 通过使用Golang的GUI库,开发人员可以轻松地创建具有丰富用户界面和交互功能的应用程序。
  3. Golang的并发性和高性能使其成为开发桌面应用的理想选择。
  4. Golang提供了丰富的标准库和第三方库,可以帮助开发人员快速构建跨平台的应用程序。
  5. 此外,Golang的静态类型和自动垃圾回收机制使得开发过程更加稳定和可靠。

无论是开发桌面应用程序还是移动应用程序,Golang都是一个强大的选择。通过使用Golang开发GUI桌面应用,开发人员可以享受到高效、可靠和易于维护的开发体验。

到此这篇关于轻松入门:使用Golang开发跨平台GUI应用的文章就介绍到这了,更多相关golang开发GUI桌面应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang对struct字段重新排序优化数据结构性能实践

    Golang对struct字段重新排序优化数据结构性能实践

    这篇文章主要为大家介绍了Golang对struct字段重新排序优化数据结构性能实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 利用Golang实现TCP连接的双向拷贝详解

    利用Golang实现TCP连接的双向拷贝详解

    公司中遇到了一个使用golang编写的agent程序,所以这篇文章主要给大家介绍了关于利用Go如何实现TCP连接的双向拷贝的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考,下面随着小编来一起看看吧。
    2017-09-09
  • go语言中for range使用方法及避坑指南

    go语言中for range使用方法及避坑指南

    Go中的for range组合可以和方便的实现对一个数组或切片进行遍历,但是在某些情况下使用for range时很可能就会被"坑",下面这篇文章主要给大家介绍了关于go语言中for range使用方法及避坑指南的相关资料,需要的朋友可以参考下
    2022-09-09
  • VSCode Golang dlv调试数据截断问题及处理方法

    VSCode Golang dlv调试数据截断问题及处理方法

    这篇文章主要介绍了VSCode Golang dlv调试数据截断问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • GoLand一键上传项目到远程服务器的方法步骤

    GoLand一键上传项目到远程服务器的方法步骤

    我们开发项目常常将项目上传到linux远程服务器上来运行,本文主要介绍了GoLand一键上传项目到远程服务器的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 深入理解Go语言的容器包

    深入理解Go语言的容器包

    Go语言的container标准包包含了堆(heap)、链表(list)和环(ring)三种数据结构,本文就来详细的介绍一下这三种的使用,感兴趣的可以了解一下
    2024-10-10
  • GO语言类型转换和类型断言实例分析

    GO语言类型转换和类型断言实例分析

    这篇文章主要介绍了GO语言类型转换和类型断言,以实例形式详细分析了类型转换和类型断言的概念与使用技巧,需要的朋友可以参考下
    2015-01-01
  • Go 高效截取字符串的一些思考

    Go 高效截取字符串的一些思考

    这篇文章主要介绍了Go 高效截取字符串的一些思考,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • golang实现并发控制的方法和技巧

    golang实现并发控制的方法和技巧

    golang 是一门支持并发的编程语言,它提供了 goroutine 和 channel 等强大的特性,让我们可以轻松地创建和管理多个执行单元,实现高效的任务处理,在本文中,我们将介绍一些 golang 的并发控制的方法和技巧,希望对你有所帮助
    2024-03-03
  • go string to int 字符串与整数型的互换方式

    go string to int 字符串与整数型的互换方式

    这篇文章主要介绍了go string to int 字符串与整数型的互换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论