Go Wails 学习笔记:创建第一个项目
文章目录
- 1. 安装 Wails
- 2. 创建 Wails 项目
- 3. 项目结构
- 4. 运行项目
- 5. 构建项目
- 6. 部署和发布
- 总结
Wails 是一个用于构建跨平台桌面应用程序的框架,允许开发者使用前端技术(如 HTML、CSS、JavaScript)以及 Go 语言来开发桌面应用。本文基于官方文档《 Wails 入门指南 - 创建第一个项目》总结 Wails 的项目创建过程。
1. 安装 Wails
在开始使用 Wails 之前,你需要在系统中安装它。按照文档的说明,使用以下命令安装 Wails:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
确保你已经安装了 Go 语言,并将其添加到环境变量中。安装完成后,可以通过运行以下命令验证 Wails 是否成功安装:
wails doctor
git:(feat-wails) ✗ wails docker
Wails CLI v2.9.2Available commands:build Builds the application dev Runs the application in development mode doctor Diagnose your environment init Initialises a new Wails project update Update the Wails CLI show Shows various information generate Code Generation Tools version The Wails CLI version Flags:-helpGet help on the 'wails' command.
此命令将检查系统的依赖环境,并确保一切正常运行。
2. 创建 Wails 项目
创建项目的过程相当简单,只需运行以下命令即可:(PS: 最新版本需要-n参数指定项目名)
wails init -n wails-demo
这会启动一个交互式的 CLI 提示,你可以选择项目的类型。通常有两种模板供选择:
- Vue 模板:适合那些喜欢使用 Vue.js 构建前端的开发者。
- React 模板:适合那些习惯于使用 React 的开发者。
选择其中一种模板并输入项目名称后,Wails 会自动生成一个包含前端和后端代码的基本项目结构。
| 框架 | 项目 | 指定TypeScript |
|---|---|---|
| svelte | wails init -n myproject -t svelte | wails init -n myproject -t svelte-ts |
| react | wails init -n myproject -t react | wails init -n myproject -t react-ts |
| vue | wails init -n myproject -t vue | wails init -n myproject -t vue-ts |
| preact | wails init -n myproject -t preact | wails init -n myproject -t preact-ts |
| lit | wails init -n myproject -t lit | wails init -n myproject -t lit-ts |
| vanilla | wails init -n myproject -t vanilla | wails init -n myproject -t vanilla-ts |
3. 项目结构
.
├── build/
│ ├── appicon.png
│ ├── darwin/
│ └── windows/
├── frontend/
├── go.mod
├── go.sum
├── main.go
└── wails.json
项目生成后,主要目录结构如下:
- frontend/:前端代码,通常使用你选择的框架(Vue/React)来编写。
- go.mod:Go 项目的模块定义文件。
- main.go:主要的 Go 语言入口文件,负责管理应用的后端逻辑。
- wails.json:Wails 项目的配置文件。
这个结构清晰地将前端和后端分离,使得开发者能够分别处理界面和逻辑部分。
frontend 目录没有特定于 Wails 的内容,可以是您选择的任何前端项目。
build 目录在构建过程中使用。 这些文件可以修改以自定义您的构建。 如果从 build 目录中删除文件,将重新生成默认版本。
go.mod 中的默认模块名称是“changeme”。 您应该将其更改为更合适的内容。
4. 运行项目
项目初始化完成后,可以通过以下命令运行项目:
wails dev
这个命令会启动开发服务器,并在默认浏览器中打开应用。在开发过程中,任何前端代码的修改都会被自动编译和更新,方便实时预览效果。
该程序执行以下操作:
- 构建您的应用程序并运行它
- 将您的 Go 代码绑定到前端,以便可以从 JavaScript 调用它
- 使用 Vite 的强大功能,将监视您的 Go 文件中的修改并在更改时重新构建/重新运行
- 启动一个 网络服务器 通过浏览器为您的应用程序提供服务。 这使您可以使用自己喜欢的浏览器扩展。 你甚至可以从控制台调用你的 Go 代码。
| 标志 | 描述 | 默认 |
|---|---|---|
| -appargs “参数” | 以 shell 样式传递给应用程序的参数 | |
| -assetdir “./path/to/assets” | 从给定目录提供资产,而不是使用提供的资产 FS | wails.json 中的值 |
| -browser | 在启动时打开浏览器到 http://localhost:34115 | |
| -compiler “编译器” | 使用不同的 go 编译器来构建,例如 go1.15beta1 | go |
| -debounce | 检测到资产更改后等待重新加载的时间 | 100 (毫秒) |
| -devserver “host:port” | 将 wails 开发服务器绑定到的地址 | “localhost:34115” |
| -extensions | 触发重新构建的扩展(逗号分隔) | go |
| -forcebuild | 强制构建应用程序 | |
| -frontenddevserverurl “url” | 使用 3rd 方开发服务器 url 提供资产,例如:Vite | “” |
| -ldflags “标志” | 传递给编译器的额外 ldflags | |
| -loglevel “日志级别” | 要使用的日志级别 - Trace, Debug, Info, Warning, Error | Debug(调试) |
| -nocolour | 关闭彩色命令行输出 | false |
| -noreload | 资产更改时禁用自动重新加载 | |
| -nosyncgomod | 不同步 go.mod 中的 Wails 版本 | false |
| -race | 使用 Go 的竞态检测器构建 | false |
| -reloaddirs | 触发重新加载的附加目录(逗号分隔) | wails.json 中的值 |
| -s | 跳过前端构建 | false |
| -save | 将指定的 assetdir、 reloaddirs、 wailsjsdir、 debounce 、 devserver 和 frontenddevserverurl 标志的值保存到 wails.json 以成为后续调用的默认值。 | |
| -skipbindings | 跳过 bindings 生成 | |
| -tags “额外标签” | 传递给编译器的构建标签(引号和空格分隔) | |
| -v | 详细级别 (0 - silent, 1 - standard, 2 - verbose) | 1 |
| -wailsjsdir | 生成生成的Wails JS模块的目录 | wails.json 中的值 |
示例:wails dev -assetdir ./frontend/dist -wailsjsdir ./frontend/src -browser此命令将执行以下操作:构建应用程序并运行它(更多细节在 这里)
在 ./frontend/src 中生成 Wails JS 模块
监听 ./frontend/dist 中文件的更新并在更改时重新加载
打开浏览器并连接到应用程序
5. 构建项目
开发完成后,你可以通过以下命令构建桌面应用:
wails build
这个命令会生成适用于目标操作系统的可执行文件。生成的文件可以直接分发和安装,无需用户单独安装任何依赖。
| 标志 | 描述 | 默认 |
|---|---|---|
| -clean | 清理 build/bin 目录 | |
| -compiler “编译器” | 使用不同的 go 编译器来构建,例如 go1.15beta1 | go |
| -debug | Retains debug information in the application and shows the debug console. 允许在应用程序窗口中使用 devtools | |
| -devtools | Allows the use of the devtools in the application window in production (when -debug is not used). Ctrl/Cmd+Shift+F12 may be used to open the devtools window. NOTE: This option will make your application FAIL Mac appstore guidelines. Use for debugging only. | |
| -dryrun | 打印构建命令但不执行它 | |
| -f | 强制构建应用 | |
| -garbleargs | 传递给 garble 的参数 | -literals -tiny -seed=random |
| -ldflags “标志” | 传递给编译器的额外 ldflags | |
| -m | 编译前跳过 mod tidy | |
| -nopackage | 不打包应用程序 | |
| -nocolour | 在输出中禁用颜色 | |
| -nosyncgomod | 不同步 go.mod 中的 Wails 版本 | |
| -nsis | 为 Windows 生成 NSIS 安装程序 | |
| -o 文件名 | 输出文件名 | |
| -obfuscated | 使用 garble 混淆应用程序 | |
| -platform | 为指定的 平台(逗号分割)构建,例如: windows/arm64。 windows/arm64。 注意,如果不给出架构,则使用 runtime.GOARCH。 | 如果给定环境变量 platform = GOOS 否则等于 runtime.GOOS。 如果给定环境变量 arch = GOARCH 否则等于 runtime.GOARCH. |
| -race | 使用 Go 的竞态检测器构建 | |
| -s | 跳过前端构建 | |
| -skipbindings | 跳过 bindings 生成 | |
| -tags “额外标签” | 构建标签以传递给 Go 编译器。 必须引用。 空格或逗号(但不能同时使用)分隔 | |
| -trimpath | 从生成的可执行文件中删除所有文件系统路径。 | |
| -u | 更新项目的 go.mod 以使用与 CLI 相同版本的 Wails | |
| -upx | 使用 “upx” 压缩最终二进制文件 | |
| -upxflags | 传递给 upx 的标志 | |
| -v int | 详细级别 (0 - silent, 1 - default, 2 - verbose) | 1 |
| -webview2 | WebView2 安装策略:download,embed,browser,error. | download |
| -windowsconsole | 保留Windows构建控制台窗口 |
示例:wails build -clean -o myproject.exe信息
在 Mac 上,应用程序将被绑定到 Info.plist,而不是 Info.dev.plist。苹果芯片上的 UPX
在苹果芯片上使用 UPX 相关的 问题。Windows 上的 UPX
一些防病毒软件供应商误将 upx 压缩的二进制文件标记为病毒,请查看相关 问题。
6. 部署和发布
构建完成的应用可以直接发布。根据操作系统的不同,你可以打包成可安装文件(如 Windows 的 .exe,MacOS 的 .dmg 等)。文档还提供了一些打包工具的建议,如 electron-builder,方便对应用进行进一步的包装和签名。
支持的平台有:
| 平台 | 描述 |
|---|---|
| darwin | MacOS + architecture of build machine |
| darwin/amd64 | MacOS 10.13+ AMD64 |
| darwin/arm64 | MacOS 11.0+ ARM64 |
| darwin/universal | MacOS AMD64+ARM64 universal application |
| windows | Windows 10/11 + architecture of build machine |
| windows/amd64 | Windows 10/11 AMD64 |
| windows/arm64 | Windows 10/11 ARM64 |
| linux | Linux + architecture of build machine |
| linux/amd64 | Linux AMD64 |
| linux/arm64 | Linux ARM64 |
总结
Wails 通过结合前端技术和 Go 后端,提供了一个高效的方式来开发跨平台的桌面应用。其简单的项目初始化和清晰的结构使得开发者能够快速上手。通过 Wails,可以充分利用 Web 开发技能,同时获得原生桌面应用的优势。
相关文章:
Go Wails 学习笔记:创建第一个项目
文章目录 1. 安装 Wails2. 创建 Wails 项目3. 项目结构4. 运行项目5. 构建项目6. 部署和发布总结 Wails 是一个用于构建跨平台桌面应用程序的框架,允许开发者使用前端技术(如 HTML、CSS、JavaScript)以及 Go 语言来开发桌面应用。本文基于官方…...
Postman使用-基础篇
前言 本教程将结合业界广为推崇和使用的RestAPI设计典范Github API,详细介绍Postman接口测试工具的使用方法和实战技巧。 在开始这个教程之前,先聊一下为什么接口测试在现软件行业如此重要? 为什么我们要学习Postman? 现代软件…...
LeetCode 202.快乐数
LeetCode 202.快乐数 C 思路: 用快慢指针来进行解答,可以将其看做一个回环链表,慢指针完成一次平方和操作,快指针完成两次平方和操作,当快慢指针相遇时,判断快慢指针是否为1(为1以后无论怎么取平方和都会为…...
Redis-03 持久化(RDB, AOF,混合持久化)及原理
1,持久化 Redis的持久化是必须的,当Redis服务宕机后,如果没有持久化,重启服务后redis中的数据都将丢失,所有的数据操作都将直连数据库,系统性能会大幅降低,所以在使用Redis做缓存服务时必须持久…...
TikTok账号策略:IP和网络环境的要求分析
在当今社交媒体迅猛发展的时代,TikTok作为一款短视频平台,凭借其独特的算法和庞大的用户基础,吸引了越来越多的内容创作者和营销人员。成功地运营一个TikTok账号,除了优质的内容创作外,良好的IP和网络环境也至关重要。…...
vue后台管理系统从0到1(5)
文章目录 vue后台管理系统从0到1(5)完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1(5) 接上一期,我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见,这一个侧边栏是符合我们…...
OpenAI的新功能Canvas,效果还不错
时隔两年,ChatGPT终迎来界面全新升级! 这一次,OpenAI官宣推出类似 Anthropic 的 Artifacts 的界面交互功能 canvas,并称这是一种使用 ChatGPT 写作和编程的新方式。不论是写作,还是编码,都可以开启全新的交…...
了解一些常用的Javascript对象方法
javascript 的对象包含许多有用的方法,可以帮助开发人员轻松操作对象。让我们通过简短的解释和示例来了解一些最重要的内容 object.create()object.assign()object.keys()object.values()object.entries()object.freeze()object.seal()object.preventextensions()o…...
【知识科普】GraphQL一个强大的API查询语言
文章目录 概述📚 GraphQL 的类型系统是如何工作的?🔍 能否举例说明 GraphQL 的类型系统在实际应用中是如何工作的?位置步骤 1: 定义类型步骤 2: 实现解析器步骤 3: 客户端查询步骤 4: 执行查询 🛠️ 在实际开发中&…...
Spring Boot 整合达梦
Maven 依赖 <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.2.192</version></dependency> yml配置 datasource:master:url: jdbc:dm://192.168.211.113:30236username: WE…...
Vue.js 组件开发基本步骤
Vue.js 是一个构建用户界面的渐进式框架,它被设计为能够轻松地被集成进项目的部分功能,或者用于构建完整的前端应用。组件化是 Vue.js 的核心概念之一,它允许开发者将界面拆分成独立、可复用的组件,每个组件负责应用中的一小部分功…...
博客搭建之路:hexo使用next主题渲染流程图
文章目录 hexo使用next主题渲染流程图 hexo使用next主题渲染流程图 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 next主题的配置文件中搜索找到mermaid,把enable配置改为true mermaid:enable: true# Available themes: default | dark | forest | neutraltheme: de…...
【数据结构与算法】线性表顺序存储结构
文章目录 一.顺序表的存储结构定义1.1定义1.2 图示1.3结构代码*C语言的内存动态分配 二.顺序表基本运算*参数传递2.1建立2.2初始化(InitList(&L))2.3销毁(DestroyList(&L))2.4判断线性表是否为空表(ListEmpty(L))2.5求线性表的长度(ListLength(L))2.6输出线性表(DispLi…...
Unix Standardization and Implementations
Unix标准化 在Unix未制定较为完备的标准时,各个平台的系统调用方式各异,所开发出的应用程序存在可移植性差的特点,因此人们呼吁指定一套Unix标准来规范接口,增加应用程序的可移植性。所谓Unix标准即适用于Unix环境下的一系列函数…...
Windows 与 Java 环境下的 Redis 利用分析
1 前言 在最近的一次攻防演练中,遇到了两个未授权访问的 Redis 实例。起初以为可以直接利用,但后来发现竟然是Windows Java (Tomcat)。因为网上没有看到相关的利用文章,所以在经过摸索,成功解决之后决定简单写一写。 本文介绍了…...
机器视觉系统硬件组成之工业相机篇
工业相机是一种非常重要的机器视觉器件,它能够将被采集的图像信息通过电路转换成电信号,再通过模数转换器(ADC)将其转化为数字信号,最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用,包括质…...
离线安装bitnami-gitlab8.8.4+汉化
注意: 常规安装gitlab需要联网,而按装bitnami-gitlab无需联网(bitnami-gitlab用于内网环境无法联网时安装gitlab,两者是一个东西只是名字不一样)bitnami-gitlab-8.8.4版本可以汉化成功新用户注册账户无需激活也可以直接登录,因为…...
亚马逊日本站推出AI日语listing功能,Listing一键发布,轻松无忧!
随着大数据与人工智能技术的成熟,AI在电商的应用也越来越多,各大电商平台都在陆续引进AI人工智能,有客服方面的,也有发布Listing方面的。 10月17日消息,亚马逊日本站近日宣布推出一项支持日语的人工智能listing功能&am…...
Golang | Leetcode Golang题解之第475题供暖器
题目: 题解: func findRadius(houses, heaters []int) (ans int) {sort.Ints(houses)sort.Ints(heaters)j : 0for _, house : range houses {dis : abs(house - heaters[j])for j1 < len(heaters) && abs(house-heaters[j]) > abs(house-…...
【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用
上篇文章: 【Vue】Vue3.0 (十二)、watch对ref定义的基本类型、对象类型;reactive定义的对象类型的监视使用 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
