Wails 学习笔记:Wails核心思想理解

news2024/10/16 20:49:39

文章目录

      • 1. Wails 的核心思想
      • 2. 工作流程
        • 2.1 前端渲染
        • 2.2 后端逻辑
        • 2.3 前后端通信
        • 2.4 应用打包与分发
      • 3. Wails 主要组件
        • 3.1 WebView
        • 3.2 事件与数据绑定
        • 3.3 窗口管理
      • 4. Wails 的优点
      • 5. Wails 的使用场景
      • 6. 启动函数Run
        • `wails.Run()` 的主要功能
        • `wails.Run()` 的参数:`wails.Options`
        • 常用选项说明:
        • `wails.Run()` 的执行流程
        • 总结

Wails 应用程序是一个带有一个 webkit 前端的标准的 Go 应用程序。 应用程序的 Go 部分由应用程序代码和一个运行时库组成, 该库提供了许多有用的操作,例如控制应用程序窗口。 前端是一个 webkit 窗口,将显示前端资源。 前端还可以使用运行时库的 JavaScript 版本。 最后,可以将 Go 方法绑定到前端,这些将显示为可以调用的 JavaScript 方法,就像它们是原生 JavaScript 方法一样。


1. Wails 的核心思想

Wails 的核心目标是允许开发者使用现代前端技术开发桌面应用,同时利用 Go 的强大后端性能。它将前端 UI(如 HTML、CSS、JavaScript)嵌入到一个原生的桌面应用窗口中,并通过 Go 来处理后端逻辑和系统调用。

Wails 提供了前端和后端的桥梁,使得前端代码能够调用 Go 后端的功能,反之亦然。这使得开发者可以用现代的前端框架来创建高效、跨平台的桌面应用程序。


2. 工作流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Wails 的工作流程包括以下几个步骤:

2.1 前端渲染

Wails 使用现代前端框架(如 Vue、React、Svelte 等)来构建用户界面。前端资源(HTML、CSS、JavaScript)会被打包并嵌入到 Go 的应用程序中。Wails 会创建一个窗口,用来显示这些前端内容。

  • 前端框架:Wails 支持主流的前端框架如 Vue、React 等,开发者可以通过这些框架构建响应式的用户界面。
  • WebView:前端的界面通过操作系统的原生 WebView 显示,这意味着应用程序的 UI 实际上是在浏览器引擎中渲染的。
2.2 后端逻辑

后端由 Go 编写,负责处理业务逻辑和与系统的交互。开发者可以使用 Go 实现一切与桌面环境相关的功能,如文件系统访问、网络请求、数据处理等。

  • Go 后端:Wails 的后端是基于 Go 的。Go 提供了强大的并发能力和系统级 API 访问权限,适合处理文件、数据库、网络等复杂的逻辑。
2.3 前后端通信

Wails 提供了一个桥梁,让前端和后端能够轻松通信。前端可以调用 Go 后端的函数,而 Go 后端也可以通知前端进行 UI 更新。这种通信机制通过以下方式实现:

  • Wails Bindings:后端的 Go 方法可以通过 wails.Bind() 暴露给前端。前端可以通过 JavaScript 调用这些绑定的 Go 方法,并获取其返回结果。
  • 事件系统:Wails 内置了一个事件系统,允许前后端以发布/订阅的方式相互通信。例如,当后端处理完某个任务后,可以发布一个事件通知前端进行更新。
2.4 应用打包与分发

Wails 可以将前端资源和后端逻辑一起打包为一个可执行文件,适用于 Windows、macOS 和 Linux。由于它不依赖像 Electron 那样的重型运行时,所以生成的应用程序体积更小,性能更高。


3. Wails 主要组件

Wails 的整体架构可以分为以下几个核心组件:

3.1 WebView

Wails 使用操作系统的原生 WebView 来展示前端内容:

  • Windows:使用 Edge (Chromium) WebView2。
  • macOS:使用 WebKit(Safari)。
  • Linux:默认使用 WebKitGTK。

与 Electron 不同,Wails 并不嵌入整个 Chromium 引擎,而是使用操作系统提供的轻量级 WebView 引擎。这大大减少了应用的体积和资源消耗。

3.2 事件与数据绑定

Wails 允许 Go 后端与前端 JavaScript 之间的互操作。开发者可以在前端调用后端的 Go 方法,后端则可以通过事件来通知前端更新视图。

  • 前端调用后端:通过 JavaScript,前端可以直接调用绑定的 Go 函数,并获取返回值。
  • 后端调用前端:Go 后端可以向前端发送事件(如通知或数据更新),让前端做出相应的处理。
3.3 窗口管理

Wails 使用原生窗口系统来管理应用窗口。你可以自定义窗口的标题、大小、是否支持无边框等。与传统的 Web 应用不同,Wails 提供了与操作系统的更深层次集成,如访问系统文件、托盘、通知等。


4. Wails 的优点

  • 轻量级:与 Electron 相比,Wails 应用程序的体积要小得多,因为它依赖于操作系统的 WebView 而不是内嵌整个浏览器引擎。
  • 高效的前后端交互:通过 Go 后端与前端的紧密集成,Wails 提供了一个快速、高效的通信机制,使得开发桌面应用既高效又简洁。
  • 跨平台:Wails 支持 Windows、macOS 和 Linux,因此同一个代码库可以轻松编译为不同平台的应用程序。
  • 现代前端支持:Wails 允许你使用现代前端框架(如 Vue、React、Svelte)来构建桌面应用的 UI。

5. Wails 的使用场景

  • 轻量级桌面应用:与 Electron 相比,Wails 更适合那些不需要繁重渲染引擎的桌面应用,尤其是对于资源敏感的应用程序。
  • 系统工具与自动化工具:利用 Go 的系统访问能力,Wails 非常适合开发与文件系统、数据库或网络交互的桌面工具。
  • 跨平台 GUI 应用:Wails 的跨平台支持使它成为开发简单跨平台 GUI 应用的绝佳选择。

6. 启动函数Run

Wails 提供了一种现代化、轻量级的桌面应用开发方式,它将 Go 的高效后端与现代前端技术相结合。通过操作系统原生 WebView,它能够显著减小应用体积,并提供优秀的性能表现。对于需要开发跨平台桌面应用、并且对性能和体积敏感的开发者来说,Wails 是一个理想的选择。

wails.Run() 是 Wails 框架中的一个关键函数,它用于启动整个 Wails 应用。该函数会初始化应用的前端和后端部分,并且根据开发者在 wails.Options 中的配置,创建应用窗口、加载前端资源、绑定后端逻辑,最终呈现一个完整的桌面应用。

wails.Run() 的主要功能
  1. 初始化 Wails 应用
    wails.Run() 负责初始化整个应用的各个部分,包括应用窗口、前端 WebView、前后端通信机制以及相关的事件系统。它是 Wails 应用的入口点,启动 Wails 框架的运行。

  2. 应用窗口管理
    根据 wails.Options 提供的配置参数,wails.Run() 会创建并显示应用窗口。Wails 支持窗口的大小、标题、是否无边框等配置,所有这些窗口设置都通过 wails.Options 传递给 wails.Run()

  3. 加载前端资源
    Wails 会将前端资源(如 HTML、CSS、JavaScript)打包在应用中,wails.Run() 会加载这些前端资源并通过 WebView 显示在窗口中。前端代码通常由现代前端框架(如 Vue、React、Svelte)构建。

  4. 绑定前后端通信
    wails.Run() 负责建立前端 JavaScript 与后端 Go 代码的通信桥梁。Go 代码可以通过 wails.Bind() 将函数暴露给前端调用。通过 Wails 的事件机制,前后端之间可以轻松交换数据和通知。

  5. 启动生命周期管理
    在 Wails 应用启动和运行的过程中,wails.Run() 会触发不同的生命周期事件,例如:

    • OnStartup:在应用启动时执行,通常用于初始化应用。
    • OnShutdown:在应用关闭时执行,用于清理资源。
    • OnDomReady:当前端的 DOM 完全加载并准备好与后端交互时触发。
wails.Run() 的参数:wails.Options

wails.Run() 接受一个 wails.Options 结构体,开发者通过这个结构体定义应用的行为和配置。wails.Options 中的常见选项包括:

err := wails.Run(&wails.Options{
    Title:            "My Wails App",    // 应用程序的标题
    Width:            1024,              // 窗口的宽度
    Height:           768,               // 窗口的高度
    MinWidth:         400,               // 窗口的最小宽度
    MinHeight:        300,               // 窗口的最小高度
    WindowStartState: options.Normal,    // 窗口的初始状态 (如最大化、最小化)
    HTML:             "frontend/dist/index.html", // 前端 HTML 文件
    Bind: []interface{}{app},            // 绑定到前端的 Go 对象或函数
    OnStartup:        app.startup,       // 启动时调用的函数
    OnDomReady:       app.domReady,      // DOM 加载完成后调用的函数
    OnShutdown:       app.shutdown,      // 应用关闭时调用的函数
})
常用选项说明:
  • Title:设置窗口的标题。
  • WidthHeight:窗口的初始宽高。
  • MinWidthMinHeight:窗口的最小尺寸。
  • WindowStartState:窗口的启动状态,比如默认、最大化、最小化。
  • HTML:前端的入口 HTML 文件路径,通常是前端打包后的静态文件(如 Vue、React 的 index.html)。
  • Bind:绑定的 Go 对象或函数,它们可以在前端 JavaScript 中调用。
  • OnStartup:启动时执行的回调,用于应用初始化。
  • OnDomReady:前端 DOM 完全加载完成时触发的回调。
  • OnShutdown:应用关闭时执行的回调,用于资源清理。
wails.Run() 的执行流程
  1. 解析 wails.Options:Wails 首先会读取 wails.Options,根据开发者的设置来配置应用窗口、加载的前端资源和绑定的后端逻辑。
  2. 创建窗口和 WebView:接着,Wails 会根据操作系统创建一个原生窗口(如 Windows 的 WebView2 或 macOS 的 WebKit),并在其中加载前端的 HTML 页面。
  3. 前后端绑定wails.Run() 会通过 wails.Bind() 将 Go 后端函数暴露给前端 JavaScript,使前端可以调用这些函数。它还会建立前后端的事件机制,确保前后端可以进行数据通信。
  4. 启动应用:最后,wails.Run() 开始监听用户事件,运行主循环,保持应用的正常运行,直到用户关闭窗口。
总结

wails.Run() 是 Wails 框架的核心启动函数,负责初始化应用、加载前端资源、配置窗口、并管理前后端通信。通过 wails.Options,开发者可以灵活配置应用的行为,如窗口属性、前端入口文件、绑定的后端函数等。

wails.Run() 不仅启动了整个应用程序,还提供了一个平台,使得现代前端技术和高效的 Go 后端能够无缝集成,从而实现高性能的桌面应用开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2216540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL8.0.28解压版安装windows

1.下载 https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-winx64.zip 2.文档 MySQL :: MySQL 8.0 Reference Manual :: 2.3.4 Installing MySQL on Microsoft Windows Using a noinstall ZIP Archive 3.创建配置文件my.ini。默认解压文件中没有 内容如下&#xff…

【LangChain系列1】【LangChain表达式 (LCEL)】

目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、LangChain表达式——LCEL2-1、LCEL介绍2-2、基本示例:提示 模型 输出解析器2-3、接口 附录、ZhiPuAI API0、安装1、设置API密钥2、基本…

无法获得下列许可 SolidWorks standard。无法连接到服务器(-15,10,10061)

太久没启动SolidWorks,今天想打开,结果给我报错,如下图所示: 看网上说是开机启动项被杀毒软件给关了,于是打开360,看了一下,果然: 还有好几个和SolidWorks相关的项目,这里…

WebRTC音频 04 - 关键类

WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架 WebRTC音频 04 - 关键类(本文) 一、前言: 在WebRTC音频代码阅读过程中,我们发现有很多关键的类比较抽象,搞不清楚会导致代码阅读一脸懵逼。比如…

吴恩达深度学习笔记(5)

调试处理(随机采样、非格网、由粗到细)及超参数 深度学习中涉及大量超参数,如下所示 在不知道哪个参数更为重要的情况下,机器学习参数较少,可以利用网络化的参数取值试验,但是深度学习参数较多的情况下&am…

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措,通过该认证,软件可以在华为的生态系统中实现更好的兼容性和性能优化,从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲鹏…

POMO:强化学习的多个最优策略优化(2020)(完)

文章目录 Abstract1 Introduction2 Related work3 Motivation4 多最优策略优化(POMO)4.1 从多个起始节点进行探索4.2 策略梯度的共享基线4.3 用于推理的多个贪婪轨迹5 Experiments5.1 Traveling salesman problem5.2 带容量限制得车辆路径问题5.3 0-1背包问题6 ConclusionAbs…

【黑马redis基础篇】介绍和数据类型

1.NoSQL //来源:02 NoSQL类型:键值、文档、图 NoSQL特点:非结构化的、无关联的、非SQL、BASE(无法满足事务ACID) 2.认识Redis //来源03 基于内存的键值型NoSQL数据库。全称远程词典服务器。 2.1特征 (1)键值型&a…

免费分享1885页Python电子书,耗时200小时整理!!!

python学习方向建议: 如果你是本科及以下学历,建议你学习以下两个方向 1、爬虫。简单的爬虫库,代理爬虫,分布式爬虫等 2、Web。学习主流Web框架,轻量级的Flask。重量级的Django等 3、自动化测试 如果你是本科以上学…

Ascend C算子编程和C++基础 Lesson5-2 算子性能优化方法2

一、层次化访问优化 1、Buffer访问优化 2、Shape对齐亲和计算,shape尽量采用32B对齐的shape 3、Buffer资源分配 二、计算资源利用优化

数据源对接,这个工具能满足你

在数字化时代,数据已成为企业决策和业务优化的关键。而数据源对接则是获取高质量、全面数据的重要途径。数据源对接能够将各种来源的数据进行标准化处理,统一接入并进行整合分析,为企业提供更加准确、可靠的数据支持。其重要性不言而喻。 一…

Scopus数据库更新,新增3本期刊剔除!(附excel下载)

Scopus官网近日更新了2024年10月期刊目录,此次更新有3本期刊被剔除(Discontinued Titles Sep. 2024),请注意避雷投稿!此外本次新增38本期刊被Scopus数据库收录(Accepted Titles Sep. 2024) 关于…

有手就会,在线sd一键体验创作气球文字

使用在线sd制作气球文字,很好闻很有趣的制作体验,快来试试吧 1.打开网站 电脑传送门👉上河AI(pc端) 手机传送门👉上河AI(移动端) 上河AI绘图最近还有限时优惠活动,从…

No.16 笔记 | SSRF(服务器端请求伪造)基础

一、SSRF基础知识 1.1 什么是SSRF? 🔍 SSRF是"Server-Side Request Forgery"的缩写,中文意思是"服务器端请求伪造"。 🎭 简单来说:攻击者让服务器去访问它不应该访问的地方。 1.2 SSRF的基本模…

程序负载优化,持续更新,建议收藏!

1.前言 对一个程序来说,内存和负载是两个重点指标。特别是对嵌入式程序来说,本身单片机的主频小,内存少,这就要求 开发工作者必须考虑如何在有限的内存和负载下开展工作。本文主要侧重负载优化。首先介绍负载的概念,其…

uniapp 微信公众号H5/app/小程序跳转小程序

1.微信公众号H5跳转小程序使用微信标签wx-open-launch-weapp a.在init.vue使用标签&#xff08;要实现跳转的页面&#xff09;<wx-open-launch-weappid"launch-btn"style"width: 100%; display: block":appid"pageParam.appId":path"pa…

机器学习中的回归分析:理论与实践

引言 回归分析是统计学和机器学习中广泛使用的技术&#xff0c;主要用于建立因变量与自变量之间的关系模型。在实际应用中&#xff0c;回归分析不仅可以帮助我们理解数据&#xff0c;还能进行有效的预测。本文将深入探讨回归分析的基本概念、常用的回归算法、应用场景&#xf…

【算法题解】二分查找的经典问题解析

文章目录 什么是二分&#xff1f;关于二分的一些题目1.分巧克力解题思路编写代码 2.数组中数值和下标相等的元素3.0到n-1中缺失的数字4.数列分段 II解题思路编写代码 总结 什么是二分&#xff1f; 二分是一种思想&#xff0c;用于有序数组中快速查找目标元素。 用动图展示一下…

如何实现前端低代码?

昨天收到在后台收到一封朋友的私信。内容如下&#xff1a; 你好&#xff0c;我关注你很久了&#xff0c;看你经常在发低代码的内容&#xff0c;内容也很好&#xff0c;所以想跟您请教一下。 最近练手在写一个低代码项目&#xff0c;实现前后端可视化应用搭建 后端采用c#&#x…

过期大米被重新销往乡村学校?论EasyCVR平台如何构建校园食品卫生安全视频监管方案

近期&#xff0c;重庆市市场监管局发布的一则通报引起了社会广泛关注。通报指出&#xff0c;酉阳县某公司存在将过期大米重新包装并销往乡村学校的行为&#xff0c;这一事件再次将校园食品卫生安全问题推向了风口浪尖。 面对这样的食品安全隐患&#xff0c;如何加强监管、确保…