热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Go和Web技术构建桌面应用程序

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个使用Go和Web技术构建桌面应用程序的

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个使用 Go 和 Web 技术构建桌面应用程序的项目——WAILS。

c17613f22195bea9a965e3cf517f9ffb.png

Wails 是一个框架,可以使用 Go 和 Web 技术帮助编写桌面应用程序。对于前端,使用 Webview 库. 不过它使用平台的本机渲染引擎(当前 Linux 和 Mac 使用 Webkit,Windows 使用 MSHTML)。前端使用 HTML / Javascript / CSS 编码,后端是纯 Go 语言。通过绑定机制,可以将 Go 代码作为返回 Promise 的功能公开给前端。该项目编译为单个可执行文件,将所有资源捆绑到其中。在 Windows 和 MacOS 上,可以将二进制文件捆绑到特定于平台的程序包中进行分发。

注意:渲染引擎是 WebView,不是捆绑的 Web 浏览器,因此某些“浏览器 API”将对您的应用程序不可用,例如 localstorage。大多数应用程序不需要使用它们,如果您仍然想这样做,可以使用 Go 来完成大多数事情。

功能

  • 后端使用标准 Go

  • 使用任意前端技术构建 UI 界面

  • 快速为您的 Go 应用生成 Vue、Vuetify、React 前端代码

  • 通过简单的绑定命令将 Go 方法暴露到前端

  • 使用原生渲染引擎 - 无嵌入式浏览器

  • 共享事件系统

  • 原生文件系统对话框

  • 强大的命令行工具

  • 跨多个平台

概述

  • Wails

Wails 被设计成尽可能缩小 web 技术和 Go 之间的差异。前端是 Webview 组件, 并且您可以使用自己喜欢的任何常见 Javascript 框架来开发前端代码,并且可以与里面的 Go 代码进行交互。这是通过共享的 IPC 机制来实现的。

a3adacfcdbb2da44ccaf526cea3e2f3d.png
  • IPC 概述

IPC 机制可以在 2 个运行时中运行,一个运行在 Javascript 中,另一个运行在 Go 中。它们都提供了一个简单的接口,从而减轻了开发人员直接处理 IPC 机制的负担。

85c7da9c8822285479be09ff3854fc63.png

运行时共享开发人员可以与之交互的公共组件:绑定和事件。

ade583f43b4d4206b5f4918e70572359.png
  • 绑定

Wails 应用程序提供了一种方法,可让您将公开的 Go 代码(绑定)到前端。使用此方法,可以将任意函数或公开的结构方法绑定。在启动时,Wails 将分析绑定的函数/方法并自动在 Javascript 中提供等效函数。使您可以直接从 Javascript 调用绑定的 Go 代码。

df954a026ae372685982baa37c7fef8a.png

Javascript 包装函数,处理了调用 Go 代码的所有复杂性。您只需使用 Javascript 调用该函数并接收一个 Promise。绑定 Go 代码功能,处理了绑定的所有复杂性。如果对 Go 代码的调用成功完成,则结果将传递到 resolve 函数。如果返回错误,则将其传递给 reject 函数。

  • 事件

Wails 提供了一个统一的事件系统,类似于 Javascript 的原生事件系统。这意味着从 Go 或 Javascript 发送的任何事件都可以由任何一方接收。数据可以随任何事件一起传递。这样,您就可以做一些简单的事情,例如让后台进程在 Go 中运行,并通知前端去更新页面。

9982b76a645069214d8c71ca142e6ffc.png

安装

  • 安装命令

安装过程非常简单,只需运行以下命令:

go get -u github.com/wailsapp/wails/cmd/wails

安装后,“wails update”命令可用于后续更新。

要获得最新功能的最新 pre-release 可以在后面附加 -pre 标签:wails update -pre.

要完成安装设置,请运行 安装命令 wails setup 并且填写对你的名字和邮箱。

  • 生成新项目

使用初始化命令 wails init 生成一个新项目,选择默认选项。

  • 构建

切换到项目目录 cd my-project 并且使用构建命令构建命令 wails build 构建你的项目。

如果一切顺利,则应该在本地目录中有一个已编译的程序。如果使用 Windows,请使用 ./my-project 来运行它或双击 myproject.exe

2f100dbea6edea9b644cfc12efdab77c.png

项目展示

5223bef9a10e181e8baff2f317f3a68f.png
WOMBAT
2f8edfd2b85ac8924923ad8ddb2d435a.png
SURGE
df6a3d5950746599e837b39ec92ba130.png
MOLLY 钱包
6645d1a1825862d48f1436901f02b6dc.gif
PORTFALL
458c21e064dfb79c655e5970f9f0a092.gif
RESTORIC
30facb9cd9ce108f40391003b8dbc802.png
OPTIMUS 截图编辑器

—END—

开源协议:MIT

开源地址:https://github.com/wailsapp/wails

(点击文末 阅读原文 可直接跳转哦~)

往期推荐

270fa6ae7a88a9a2c6ce042674cc19eb.png

《Go 开源说 2022》预告PAAS系列之第12期 集群镜像技术 sealer

f702a6fb12e401f8ddc6c895a6226ae9.jpeg

基于 QUIC 协议的 HTTP/3 正式发布

d62bc535f93933ab012192020d792761.jpeg

Go高级工程师必修课 | 真心建议你来听听,别错过~

想要了解Go更多内容,欢迎扫描下方👇 关注 公众号,回复关键词 [实战群]  ,就有机会进群和我们进行交流

6955384196b1db67f4188051410f00b3.png

分享、在看与点赞,至少我要拥有一个叭~

b784e18f3f86921225b266c9401956f2.gif

c3ebb687cf3ef9f6ae0fdcd20554fa22.gif


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • Vue 开发技巧:实现数据过滤与排序功能详解
    Vue 开发技巧:实现数据过滤与排序功能详解 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理
    深入解析 Vue3 中的响应式 API:shallowReactive、shallowRef、triggerRef 和 customRef 的使用与原理 ... [详细]
author-avatar
G小麥NO1_238
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有