[golang gui]fyne框架代码示例
1、下载GO
Go语言中文网
golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的golang安装包)
golang安装包 - 中科大镜像站
go二进制文件下载 - 南京大学开源镜像站
Go语言官网(Google中国)
Go语言官网(Go团队)
截至目前(2023年9月17日),Go语言(Golang)的最新版本是Go 1.21.1。
所以下载的文件名为go1.21.1.windows-amd64.msi
2、安装GO
双击打开go1.21.1.windows-amd64.msi,一直选择Next,最后选择Install即可,点击Finish结束安装。
(或者自行更改安装位置)

新建命令行窗口,运行命令go version,如果输出类似go version go1.21.1 windows/amd64的版本信息则安装成功。
3、配置代理
运行命令cmd.exe /c "go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct"配置代理
运行命令go env查看是否有GO111MODULE=on和GOPROXY=https://goproxy.cn,direct
参考:
1.代理配置方法 - goproxy.cn(往下滑动网页就是用法介绍)
2.代理配置方法 - goproxy.io
4、安装VSCode
4.1安装
(注意:已安装旧版本VSCode,建议更新到最新版本)
访问这个👉链接:如何下载安装VSCode
安装插件:简体中文、Go
4.2配置
在VSCode中点击F1显示所有命令,输入框搜索>Go: Install/Update Tools,点击搜索到的命令

全选所有可用的 Go 工具,点击 OK 按钮,等待输出(安装过程无任何输出,预计时间:6分钟)。
(如果弹出提示说哪个没安装,不用管,在安了,在安了,VSCode比我都急😓)

4.3完成
All tools successfully installed. You are ready to Go. :)说明安装完毕。
配置完毕后,关闭VSCode。

参考为 Go 开发配置Visual Studio Code - Go on Azure | Microsoft Learn
4.4不让VSCode擅自删除未识别的包
(先写import后写代码点保存直接把导入删了???那我不白写了么?)
VSCode,点击左下角齿轮图标,选择配置文件(默认),显示配置文件内容,打开settings.json
添加如下内容(这需要另行学习json文件格式的知识,不然设置无效)
"[go]": {"editor.codeActionsOnSave": {"source.organizeImports": false}},
5、写代码
5.1创建
运行PowerShell命令mkdir hello_go;cd hello_go;New-Item main.go;go mod init hello_go;code .
5.2编辑
编辑文件.\hello_go\main.go(格式化快捷键Shift+Alt+F)
package main // 声明 main 包,表明当前是一个可执行程序import "fmt" // 导入内置 fmtfunc main() { // main函数,是程序执行的入口fmt.Println("Hello World!") // 在终端打印 Hello World!
}


快捷键Ctrl+S保存文件。
5.3调试
(遇到 VSCode 通过防火墙的提示,勾选网络,点击允许访问。)

按F5启动调试
成功输出Hello World!

5.4编译
运行命令go build
运行命令.\hello_go.exe

6、安装fyne库
1.Fyne v2 版本的框架包
运行go get fyne.io/fyne/v2
2.Fyne 的命令行工具
运行go install fyne.io/fyne/v2/cmd/fyne@latest
3.go-findfont(顺带就安装了)
运行go get github.com/flopp/go-findfont
7、安装msys2
7.1下载
中科大镜像
清华大学开源软件镜像站
南京大学开源镜像站
北京外国语大学开源软件镜像站
上海交通大学
msys2官网
下载msys2-x86_64-20230718.exe
7.2安装
1.双击msys2-x86_64-20230718.exe运行安装包
2.记录安装位置,不知道位置和没安装一样

3.开始菜单快捷方式不要动,直接点击下一步

4.等待安装

5.取消勾选立即运行 MSYS2

7.3更新安装
1.Windows开始菜单搜索MSYS2 MINGW64,打开该软件(%AppData%\Microsoft\Windows\Start Menu\Programs\MSYS2)
2.运行pacman -Syu

Proceed with installation? [Y/n],直接点击回车即可(默认的选择就是Y)

To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]
直接点击回车即可(默认的选择就是Y)

3.在Windows开始菜单再次搜索MSYS2 MINGW64并打开该软件
4.运行pacman -S git mingw-w64-x86_64-toolchain

Enter a selection (default=all):
直接点击回车即可(默认的选择就是all)

Proceed with installation? [Y/n],直接点击回车即可(默认的选择就是Y)

光标跳动则安装完成,关闭窗口

7.4环境变量
1.找到gcc.exe的位置(找不到的用Everything搜索)

2.默认位置为C:\msys64\mingw64\bin
3.访问rapidee官网下载软件Rapid Environment Editor
下载地址https://www.rapidee.com/download/RapidEEx64.zip
4.右键rapidee.exe以管理员身份运行
5.改为中文

6.左侧找到Path,右键Path,选择添加值

7.写入gcc.exe文件的实际所在文件夹(默认位置为C:\msys64\mingw64\bin),回车确认输入

8.点击保存,关闭软件

7.5判断安装成功
访问判断工具下载地址
解压后运行Fyne Setup.exe

8、清空原hello代码重新编辑main.go
8.1编辑
package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget"
)func main() {a := app.New()w := a.NewWindow("Hello, World!")w.SetContent(widget.NewLabel("Hello, world!"))w.ShowAndRun()
}
编辑完有很多报错

运行go mod tidy后,等待一下就恢复了,报错就没有了
8.2编译
运行命令go build
运行命令.\hello_go.exe

9、中文支持(findfont)
9.0安装
其实之前安装过了,不小心弄没了就再安装一下
安装go-findfont
运行go get github.com/flopp/go-findfont
9.1编辑
清空原代码重新编辑main.go
package mainimport ("os""strings""github.com/flopp/go-findfont""fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget"
)func init() {//设置中文字体:解决中文乱码问题(很明显,这是Windows平台的方案,苹果电脑哪来的微软雅黑?)fontPaths := findfont.List()for _, path := range fontPaths {// 微软雅黑 msyh.ttf// 黑体 simhei.ttf// 宋体 SIMSUN.TTF// 楷体 simkai.ttfif strings.Contains(path, "msyh.ttf") || strings.Contains(path, "simhei.ttf") || strings.Contains(path, "simsun.ttc") || strings.Contains(path, "simkai.ttf") {os.Setenv("FYNE_FONT", path)break}}
}func main() {a := app.New()w := a.NewWindow("你好 世界!")w.Resize(fyne.NewSize(240, 40))w.SetContent(widget.NewLabel("哈喽 沃德!"))w.ShowAndRun()
}
编辑完可能会有警告,运行go mod tidy修复
9.2编译
运行命令go build
运行命令.\hello_go.exe

10、中文支持(bundle)
10.1在main.go中删除不用的findfont
最终结果如下
package mainimport ("fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget"
)func main() {a := app.New()w := a.NewWindow("你好 世界!")w.Resize(fyne.NewSize(240, 40))w.SetContent(widget.NewLabel("哈喽 沃德!"))w.ShowAndRun()
}
运行go mod tidy,去掉在go.mod中记录的 findfont 依赖项
10.2下载字体
访问猫啃网下载霞鹜漫黑
解压后获得字体文件.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑\LXGWMarkerGothic-Regular.ttf
10.3打包字体
(打包字体时禁止以任何形式使用PowerShell直接调用fyne bundle,但是可以使用PowerShell调用cmd调用fyne bundle)
在字体文件所在文件夹.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑运行cmd.exe /c "fyne bundle LXGWMarkerGothic-Regular.ttf >> bundle.go"
得到.\霞鹜漫黑0.200_猫啃网\霞鹜漫黑\bundle.go
10.3主题
1.在项目中新建文件夹.\hello_go\theme
2.将bundle.go复制到项目中:.\hello_go\theme\bundle.go
3.将bundle.go中的package main改为package theme(包名需要与其所在的文件夹名称相同)
4.新建自定义主题文件.\hello_go\theme\theme.go
package themeimport ("fyne.io/fyne/v2""fyne.io/fyne/v2/theme""image/color"
)type MyTheme struct{}var _ fyne.Theme = (*MyTheme)(nil)// return bundled font resource
// resourceLXGWMarkerGothicRegularTtf 即是 bundle.go 文件中 var 的变量名
func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {return resourceLXGWMarkerGothicRegularTtf
}
func (*MyTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {return theme.DefaultTheme().Color(n, v)
}func (*MyTheme) Icon(n fyne.ThemeIconName) fyne.Resource {return theme.DefaultTheme().Icon(n)
}func (*MyTheme) Size(n fyne.ThemeSizeName) float32 {return theme.DefaultTheme().Size(n)
}
10.4使用主题
编辑main.go
package mainimport ("hello_go/theme""fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget"
)func main() {a := app.New()a.Settings().SetTheme(&theme.MyTheme{})w := a.NewWindow("你好 世界!")w.Resize(fyne.NewSize(240, 40))w.SetContent(widget.NewLabel("哈喽 沃德!"))w.ShowAndRun()
}
10.5运行
运行命令go run main.go

11、发布应用程序
11.1图片
准备一张图片,命名为icon.png,放到项目中:.\hello_go\icon.png

11.2打包
1.运行fyne package -os windows -icon icon.png
2.exe文件图标修改效果

3.窗口左上角图标修改效果

12、对比一下发布后的程序大小
原字体文件: 2.61 MB (2,742,208 字节)
内嵌方案: 34.2 MB (35,903,711 字节)
findfont方案:31.6 MB (33,202,283 字节)
| 内嵌方案 | findfont方案 | |
|---|---|---|
| 大小 | 34.2 MB (35,903,711 字节) | 31.6 MB (33,202,283 字节) |
| 特点 | 开箱即用,但是乱选字体有侵权风险 | 读取系统字体,但是系统都没有字体那就完了 |
| 字体 | 原字体文件: 2.61 MB (2,742,208 字节) | 无 |
链接
Go语言中文文档
Fyne toolkit 开发文档
Fyne Setup
fyne started
Go 技术论坛
打包字体
引用字体

相关文章:
[golang gui]fyne框架代码示例
1、下载GO Go语言中文网 golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的golang安装包) golang安装包 - 中科大镜像站 go二进制文件下载 - 南京大学开源镜像站 Go语言官网(Google中国) Go语言官网(Go团队) 截至目前(2023年9月17日&#x…...
2000-2018年各省能源消费和碳排放数据
2000-2018年各省能源消费和碳排放数据 1、时间:2000-2018年 2、范围:30个省市 3、指标:id、year、ENERGY、COAL、碳排放倒数*100 4、来源:能源年鉴 5、指标解释: 2018年碳排放和能源数据为插值法推算得到 碳排放…...
C# ref 学习1
ref 关键字用在四种不同的上下文中; 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般…...
MQ - 08 基础篇_消费者客户端SDK设计(下)
文章目录 导图Pre概述消费分组协调者消费分区分配策略轮询粘性自定义消费确认确认后删除数据确认后保存消费进度数据消费失败处理从服务端拉取数据失败本地业务数据处理失败提交位点信息失败总结导图 Pre...
Flutter层对于Android 13存储权限的适配问题
感觉很久没有写博客了,不对,的确是很久没有写博客了。原因我不怎么想说,玩物丧志了。后面渐渐要恢复之前的写作节奏。今天来聊聊我最近遇到的一个问题: Android 13版本对于storage权限的控制问题。 我们都知道,Andro…...
Android kotlin开源项目-功能标题目录
目录 一、BRVAH二、开源项目1、RV列表动效(标题目录)2、拖拽与侧滑(标题目录)3、数据库(标题目录)4、树形图(多级菜单)(标题目录)5、轮播图与头条(标题目录)6…...
Linux下,基于TCP与UDP协议,不同进程下单线程通信服务器
C语言实现Linux下,基于TCP与UDP协议,不同进程下单线程通信服务器 一、TCP单线程通信服务器 先运行server端,再运行client端输入"exit" 是退出 1.1 server_TCP.c **#include <my_head.h>#define PORT 6666 #define IP &qu…...
qt功能自己创作
按钮按下三秒禁用 void MainWindow::on_pushButton_5_clicked(){// 锁定界面setWidgetsEnabled(ui->centralwidget, false);// 创建一个定时器,等待3秒后解锁界面QTimer::singleShot(3000, this, []() {setWidgetsEnabled(ui->centralwidget, true);;//ui-&g…...
Linux网络编程:使用UDP和TCP协议实现网络通信
目录 一. 端口号的概念 二. 对于UDP和TCP协议的认识 三. 网络字节序 3.1 字节序的概念 3.2 网络通信中的字节序 3.3 本地地址格式和网络地址格式 四. socket编程的常用函数 4.1 sockaddr结构体 4.2 socket编程常见函数的功能和使用方法 五. UDP协议实现网络通信 5.…...
【后端速成 Vue】初识指令(上)
前言: Vue 会根据不同的指令,针对标签实现不同的功能。 在 Vue 中,指定就是带有 v- 前缀 的特殊 标签属性,比如: <div v-htmlstr> </div> 这里问题就来了,既然 Vue 会更具不同的指令&#…...
爬虫 — Scrapy-Redis
目录 一、背景1、数据库的发展历史2、NoSQL 和 SQL 数据库的比较 二、Redis1、特性2、作用3、应用场景4、用法5、安装及启动6、Redis 数据库简单使用7、Redis 常用五大数据类型7.1 Redis-String7.2 Redis-List (单值多value)7.3 Redis-Hash7.4 Redis-Set (不重复的)7.5 Redis-Z…...
tcpdump常用命令
需要安装 tcpdump wireshark ifconfig找到网卡名称 eth0, ens192... tcpdump需要root权限 网卡eth0 经过221.231.92.240:80的流量写入到http.cap tcpdump -i eth0 host 221.231.92.240 and port 80 -vvv -w http.cap ssh登录到主机查看排除ssh 22端口的报文 tcpdump -i …...
计算机网络运输层网络层补充
1 CDMA是码分多路复用技术 和CMSA不是一个东西 UPD是只确保发送 但是接收端收到之后(使用检验和校验 除了检验的部分相加 对比检验和是否相等。如果不相同就丢弃。 复用和分用是发生在上层和下层的问题。通过比如时分多路复用 频分多路复用等。TCP IP 应用层的IO多路复用。网…...
java CAS详解(深入源码剖析)
CAS是什么 CAS是compare and swap的缩写,即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。 cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等之前获得锁的线程释放锁之后&am…...
1786_MTALAB代码生成把通用函数生成独立文件
全部学习汇总: GitHub - GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes…...
2023/09/19 qt day3
头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QDebug> #include <QTime> #include <QTimer> #include <QPushButton> #include <QTextEdit> #include <QLineEdit> #include <QLabel> #include &l…...
Docker 学习总结(78)—— Docker Rootless 让你的容器更安全
前言 在以 root 用户身份运行 Docker 会带来一些潜在的危害和安全风险,这些风险包括: 容器逃逸:如果一个容器以 root 权限运行,并且它包含了漏洞或者被攻击者滥用,那么攻击者可能会成功逃出容器,并在宿主系统上执行恶意操作。这会导致宿主系统的安全性受到威胁。 特权升…...
如何使用ArcGIS Pro将等高线转DEM
通常情况下,我们拿到的等高线数据一般都是CAD格式,如果要制作三维地形模型,使用栅格格式的DEM数据是更好的选择,这里就为大家介绍一下如何使用ArcGIS Pro将等高线转DEM,希望能对你有所帮助。 创建TIN 在工具箱中选择“…...
【爬虫基础】万字长文详解XPath
1. 引言 XPath(XML Path Language)是一种在XML和HTML文档中查找和定位信息的强大工具。XPath的重要性在于它允许我们以简洁而灵活的方式导航和选择文档中的元素和属性。本文将深入介绍XPath的基础知识,帮助你掌握这个强大的查询语言…...
分布式多级缓存SDK设计的思考
分布式多级缓存SDK设计的思考 背景整体架构多层级组装回调埋点分区处理一致性问题缓存与数据库之间的一致性问题不同层级缓存之间的一致性问题不同微服务实例上,非共享缓存之间的一致性问题 小结 之前实习期间编写过一个简单的多级缓存SDK,后面了解到一些…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
