Waigo是用“Golang+Web”写的“视图窗口+稳定服务”的桌面端(Win、Mac、Ubuntu)多功能程序基座。开箱即用但有一定上手门槛。

复制代码
代码习惯无复杂继承和类。

Waigo基于Wails3、Ginvel3等底层Go框架。

GUI 前端默认 Svelte5,运行于 Webview2、Webkit、WebKitGTK 中。

打包安装包体积在 20MB 左右,RAM 占用 90MB 左右。

全静态,可挂载其它语言程序编写的二进制子程序。

规则:

Python版基座请戳:https://github.com/fyonecon/Ginthon (Open Code,ApacheV2 协议开源)。

Golang版基座请戳:https://github.com/fyonecon/Waigo (Closed Enterprise,商业闭源)。

Go和Py的基座代码都是"功能对齐+UI复用"的。

Go和Py都是以"尽量'返回默认值'代替'抛出Error'"+"尽量复用函数"+"尽量不使用继承"+"减少不必要的外部import"为原则。

拉取项目:

git clone -b main https://github.com/fyonecon/Waigo.git Waigo-Main

然后将"WaigoDemo"关键词全局替换成你的项目名称即可成为你的应用。

运行项目:

⚠️由于项目引入了Skeleton UI,运行npm或pnpm时,需要在/frontend/目录执行"npx sv add tailwindcss"来自动配置 Tailwind CSS 和相关的依赖:

(参考:https://www.skeleton.dev/docs/svelte/get-started/installation/sveltekit )

npx sv add tailwindcss

下面命令已经内置包含npm install、go mod tidy。

wails3 dev

打包成桌面可运行程序包:

详细打包请参考:https://v3alpha.wails.io/guides/build/building/

【安装包图标制作】:

准备好512x512px的原始图标(目录:build/appicon.png)

运行如下命令可以自动生成三个平台的对应格式的icon:

wails3 dev 时自动生成

推荐真机打包对应软件架构版本,因为一些依赖在各个平台下运行不一致。

打包后的软件在"/Waigo/bin"目录。

【.app、.exe、.deb 安装包】:

macOS平台(.app <.dmg安装包请手动压缩> <需要真机>):

wails3 package GOOS=darwin GOARCH=amd64

wails3 package GOOS=darwin GOARCH=arm64

Windows平台(.exe <推荐真机>):

wails3 package GOOS=windows GOARCH=amd64

wails3 package GOOS=windows GOARCH=arm64

Linux平台(.deb for Ubuntu <需要真机>):

wails3 package GOOS=linux GOARCH=amd64
wails3 package GOOS=linux GOARCH=arm64

项目结构:

Go命名原则:
  • 系统集文件夹名或文件名:小写+下划线
  • 自定义文件夹名:大驼峰
  • 自定义函数:大驼峰
  • 自定义变量:小驼峰
  • 自定义类:大驼峰
  • 自定义结构体和结构体成员:大驼峰
  • 自定义接口名:小写+下划线
Frontend命名原则:
  • 函数及变量:小写+下划线

  • 引号:双引号 使用优先于 单引号

    Waigo-Main
    ├── bin wails自动打包的程序包(此文件可以删除)目录
    ├── docs 其它文档
    ├── build 配置Mac、Win、Linux环境的、名称、版本、打包信息等目录
    │ ├── darwin Mac(里面图标根据appicon.png自动生成)
    │ ├── linux Linux(里面图标根据appicon.png自动生成)
    │ ├── window Win(里面图标根据appicon.png自动生成)
    │ ├── appicon.png "软件图标"或"进程图标"或"关于图标"(appicon.png 1024x1024)
    │ ├── config.yml (暂时无用)
    │ └── Taskfile.yml
    ├── frontend 视图UI,默认SvelteKit
    │ ├── src 视图发开发文件
    │ │ ├── common 公共函数
    │ │ ├── pages 路由页面的具体实现
    │ │ ├── parts Svelte复用组件
    │ │ ├── stores 绑定跨组件全局公共数据
    │ │ ├── services 内部服务(如 中间件 )
    │ │ ├── routes SvelteKit的路由、layout。(不做页面实现,只做路由页面引导和Layout)
    │ │ │ ├── +layout.svelte 全局事件
    │ │ │ ├── +page.svelte 根路由
    │ │ │ ├── layout.css 全局CSS(框架内置的CSS)
    │ │ │ └── page.css 全局CSS(自定义的CSS)
    │ │ ├── config.js 配置文件
    │ │ └── watch_window.js 与后端Go或Py交互,获取交互Token
    │ ├── static 静态文件、图标
    ├── ginassets 额外的资源文件、视图文件。外部浏览器可访问,软件内部可以直接访问。
    │ ├── files 其它可网络访问的文件
    │ │ └── test.txt
    │ ├── html 放需要额外暴露相关web静态文件
    │ │ └── index.html
    │ ├── ssl_127 本地 127.0.0.1 https ssl证书
    │ ├── appicon.png 在dock栏显示的app图标(1024x1024)
    │ ├── favicon.ico
    ├── internal 框架逻辑
    │ ├── app 自定义程序
    │ │ ├── app_request 额外的接口服务(基于Gin)
    │ │ │ ├── http_controller 基于http
    │ │ │ │ └── ....go
    │ │ │ │ ├── Files.go
    │ │ │ │ └── namespace.struct.go 空间命名的Struct
    │ │ │ ├── ws_controller 基于websocket
    │ │ │ │ └── ....go
    │ │ │ │ ├── Files.go
    │ │ │ │ └── namespace.struct.go 空间命名的Struct
    │ │ │ ├── request.app_token
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ ├── app_tray 服务:状态栏托盘
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ │ └── tray.view.go
    │ │ ├── app_window 服务:Wails主视图相关
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ │ ├── window_controller
    │ │ │ │ ├── init.go 空间命名的Struct
    │ │ │ │ ├── ListGoRunJS.go Go调用JS对照表
    │ │ │ │ └── ListJSCallGo.go JS调用GO对照表
    │ │ │ ├── window.go_run_js.go
    │ │ │ ├── window.js_call_go.go
    │ │ │ └── window.sub_view.go 主视窗辅助接口
    │ ├── bootstrap 框架逻辑的实现(服务启动)
    │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ ├── driver.request.go 额外的接口服务启动
    │ │ ├── driver.manage_cpu.go 智能分配CPU服务启动
    │ │ ├── driver.time_interval.go 周期或心跳服务启动
    │ │ ├── driver.tray.go 状态栏托盘服务启动
    │ │ ├── driver.check_sys.go 运行系统环境检测
    │ │ └── driver.window.go GUI服务启动
    │ ├── common 公用函数、封装的kit
    │ │ ├── kits 封装的各种kit
    │ │ │ ├── kits.unzip_un7Z.go 文件解压
    │ │ │ ├── kits.CacheData.go 软件启动后的自定义参数数据,关闭软件后消失
    │ │ │ ├── kits.ExecDarwin.go 自动在Mac环境下编译
    │ │ │ ├── kits.ExecWindows.go 自动在Win环境下编译
    │ │ │ ├── kits.FileContentTypeDict.go 文件格式对照表
    │ │ │ ├── kits.local_database.go 本地对称加密的"K-V型数据库"
    │ │ │ ├── kits.ICON.go 二进制图标
    │ │ │ ├── kits.IconData.go 二进制图标
    │ │ │ └── kits.Secret.go 对称加密
    │ │ ├── func.go 公用函数
    │ │ ├── fmt_println.go 公用打印日志函数
    │ │ ├── response_js_file.go 用api输出.js文件
    │ │ ├── window_auth.go 视窗基础接口安全
    │ │ ├── request_data.go 公用处理Gin Input请求参数函数
    │ │ └── translate.go 多语言翻译对照表
    │ ├── routes 路由,服务于request,基于Gin
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ │ ├── route.window.go 必要路由(js_call_go)
    │ │ │ ├── route.must.go 必要路由(Gin default API)
    │ │ │ ├── ws_api.go Websocket专用
    │ │ │ ├── http_api.go
    │ │ │ ├── http_file.go
    │ │ │ └── http_html.go
    │ ├── services 框架服务封装
    │ │ ├── time_interval 服务:定时器等
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ │ └── time_interval.go 定时器任务实现
    │ │ ├── middlewares 中间件
    │ │ │ ├── namespace.struct.go 空间命名的Struct
    │ │ │ └── ....go
    │ ├── config.map.go 配置文件:只读
    │ └── config.setter.go 配置文件:读、写
    ├── go.mod
    ├── go.sum
    ├── LICENSE
    ├── main.go
    ├── waigo.go 创建GUI服务
    ├── README.md
    └── Taskfile.yml Wails官方的命令行任务

Golang环境搭建:

Go下载:https://golang.google.cn/dl/

Node下载:https://nodejs.org/en/download

Git下载:https://git-scm.com/install/mac

开发工具(IDE):VSCode、Goland

开启mod模式:

go env -w GO111MODULE=on

go get大陆地区代理:

go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

相关推荐
爱滑雪的码农5 小时前
详细说说React大型项目结构以及日常开发核心语法
前端·javascript·react.js
@大迁世界6 小时前
43.HTML 事件处理和 React 事件处理有什么区别?
前端·javascript·react.js·html·ecmascript
ZC跨境爬虫6 小时前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)
前端·javascript·ui·html·音视频
@大迁世界7 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?
前端·javascript·css·react.js·前端框架
xiangxiongfly9159 小时前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
费曼学习法10 小时前
React 18 并发模式(Concurrent Mode):Fiber 架构的终极进化
javascript·react.js
_风满楼10 小时前
TDD 进阶:换个角度看会议室预约
前端·javascript·github
子兮曰10 小时前
SuperSplat 深度解析:7.6K Stars 的浏览器端 3D 高斯泼溅编辑器 — 在 Web 上编辑现实
前端·javascript·webgl
xiangxiongfly91511 小时前
Vue3 动态加载静态资源
前端·javascript·vue.js
克里斯蒂亚诺更新11 小时前
ruoyi切换新版本初始化需要修改的地方
前端·javascript·vue.js