一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目

大家好,今天给大家分享一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目Wails

Wails是一个允许开发者使用Go和Web技术编写桌面应用程序的项目。
它被设计为Go的快速且轻量的Electron替代品,旨在提供一个平台,让开发者可以利用Go的性能优势,并结合任何前端技术栈,如React、Vue或Svelte,来创建桌面应用。

项目介绍

Wails作为一个桥梁,连接强大的Go后端逻辑与丰富的Web前端界面,允许开发者利用两者的最佳特性来开发应用。下面是Wails项目的一些关键特点和优势:

特色功能

1. 跨平台能力

Wails编译的应用可以运行在Windows、macOS和Linux上,支持原生菜单、对话框、主题和半透明,无需为每个平台单独编写代码,大大提高了开发效率和应用的可移植性。

2. Go语言后端

利用Go语言的强大功能和性能优势,处理后台逻辑、文件操作、网络通信等任务,同时享受Go的简洁语法和并发处理能力。

3. Web技术前端

前端界面可以使用诸如Vue.js、React、Angular等现代JavaScript框架来构建,这些技术成熟且拥有活跃的社区支持,便于构建交互丰富的用户界面。

4. 轻量级替代方案

Wails被视作Go语言环境下的轻量级Electron替代品,意味着它可以提供类似Electron的开发体验,但目标是创建更小、更快的应用程序。

5. 内置开发工具

Wails提供了一个命令行工具(wailsdev),用于快速搭建、编译和启动应用,包括自动处理前端依赖安装,简化了开发流程。

6. 社区和资源

有如Awesome Wails这样的资源宝库,为开发者提供了模板、启动器、开源组件等,帮助快速启动项目并提升开发效率。

7. 模块化和可扩展

Wails支持自定义绑定,使得开发者能够轻松地将Go代码暴露给前端JavaScript调用,实现前后端的紧密集成。

安装使用

支持的平台

  • Windows 10/11 AMD64/ARM64
  • MacOS 10.13+ AMD64
  • MacOS 11.0+ ARM64
  • Linux AMD64/ARM64

依赖

Wails 有许多安装前需要的常见依赖项:

  • Go 1.18+
  • NPM (Node 15+)

Go

从 Go 下载页面 下载 Go。

确保您遵守官方的 Go 安装说明。 您还需要确保您的 PATH 环境变量包含您的 ~/go/bin 目录路径。 重启终端并执行以下命令检查:

  • 检查 Go 是否安装正确:go version
  • 检查 “~/go/bin” 是否在您的 PATH 变量中: echo $PATH | grep go/bin

NPM

从 Node 下载页面 下载 NPM。 最好使用最新版本,因为这是我们通常会测试的版本。

运行 npm --version 进行验证。

安装Wails

运行 go install github.com/wailsapp/wails/v2/cmd/wails@latest 安装 Wails CLI。

注意:如果您遇到了类似于以下内容的错误:

....\Go\pkg\mod\github.com\wailsapp\wails\v2@v2.1.0\pkg\templates\templates.go:28:12: pattern all:ides/*: no matching files found

请检查您是否已安装 Go 1.18+ ︰

go version

系统检查

运行 wails doctor 将检查您是否安装了正确的依赖项。 如果没有,它会就缺少的内容提供建议以帮助纠正问题。

创建项目

现在 CLI 已安装,您可以使用 wails init 命令生成一个新项目。

  • Svelte
wails init -n myproject -t svelte//如果您更愿意使用 TypeScript:
wails init -n myproject -t svelte-ts
  • React
wails init -n myproject -t react//如果您更愿意使用 TypeScript:
wails init -n myproject -t react-ts
  • Vue
wails init -n myproject -t vue//如果您更愿意使用 TypeScript:
wails init -n myproject -t vue-ts
  • Preact
wails init -n myproject -t preact//如果您更愿意使用 TypeScript:
wails init -n myproject -t preact-ts
  • Lit
wails init -n myproject -t lit//如果您更愿意使用 TypeScript:
wails init -n myproject -t lit-ts

还有提供不同功能和框架的 社区模板。

要查看其他可用选项,您可以运行 wails init -help。 更多详细信息可以在 初始化命令 中找到。

项目布局

Wails 项目有以下布局:

.
├── build/
│   ├── appicon.png
│   ├── darwin/
│   └── windows/
├── frontend/
├── go.mod
├── go.sum
├── main.go
└── wails.json

项目结构概要

  • /main.go - 主应用
  • /frontend/ - 前端项目文件
  • /build/ - 项目构建目录
  • /build/appicon.png - 应用程序图标
  • /build/darwin/ - Mac 特定的项目文件
  • /build/windows/ - Windows 特定的项目文件
  • /wails.json - 项目配置
  • /go.mod - Go module 文件
  • /go.sum - Go module 校验文件

frontend 目录没有特定于 Wails 的内容,可以是您选择的任何前端项目。

build 目录在构建过程中使用。 这些文件可以修改以自定义您的构建。 如果从 build 目录中删除文件,将重新生成默认版本。

go.mod 中的默认模块名称是“changeme”。 您应该将其更改为更合适的内容。

编译项目

从项目目录,运行 wails build。 这将编译您的项目并将构建的可用于生产的二进制文件保存在 build/bin 目录中。

如果您运行二进制文件,您应该会看到默认应用程序:

项目地址

https://github.com/wailsapp/wails

一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目 - BTool博客 - 在线工具软件,为开发者提供方便 

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

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

相关文章

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置,该组件在类库的信息流类目下,端口不变,填写ip即可; 2、设备配置界面,在控件入口和出口处各挂一个脚本,…

uniapp uni-combox 数据源使用对象,选择后获取对应项的ID,可指定自定义的balbel,value

背景&#xff1a;uniApp中uni-combox数据源只支持接受一维数组&#xff0c;无法对每个选项指定具体的id&#xff0c;更无法实现选中后返回id&#xff0c;对原有的源码进行改造后如下&#xff1a; <template><view class"uni-combox" :class"border ?…

文件读写操作之c语言、c++、windows、MFC、Qt

目录 一、前言 二、c语言文件读写 1.写文件 2.读文件 三、c文件读写 1.写文件 2.读文件 四、windows api文件读写 1.写文件 2.读文件 五、MFC文件读写 1.写文件 2.读文件 六、Qt文件读写 1.写文件 2.读文件 七、总结 一、前言 我们在学习过程中&#xff0c…

面向对象机考指南

目录 Eclipse使用 调字体大小 Ptg to JavaBean 解决控制台消失问题 第三题大题 控制台 Eclipse使用 调字体大小 Window —> Preferences 搜索font 点击Color and Fonts 找到Java 展示字体 这个这个 即可调节字体大小 Ptg to JavaBean 生成 空参构造 带参构造 gett…

C++基础(一)

目录 1.不同版本的hello word&#xff01; 2.namespace和&#xff1a;&#xff1a;域作用限定符以及using 2.1 namespace 2.2&#xff1a;&#xff1a; 2.3using用于展开域 3.C输入和输出 4.缺省参数 5.重载 6.引用 6.1引用介绍 6.2 引用的特性 注意&#xff1a; 6.4 c…

win11用户由中文名改为英文名

目录 前情提要 一喜一悲&#xff1a;找回“消失”的文件&#xff0c;却失去新建文件的权限。 找回“消失”的文件 ​编辑 失去新建文件的权限 核心问题&#xff1a;怎么解决右键只建立文件夹&#xff1f; 弯路1&#xff1a;获取管理员权限 弯路2&#xff1a;获取管理员权…

Linux基础(权限)+mysql(函数)+初始shell

[rootcentos ~]# whereis test.c test: /usr/bin/test /usr/share/man/man1/test.1.gz /usr/share/man/man1p/test.1p.gz [rootcentos home]# zip -r my.zip lesson1 将目录设为zip unzip my.zip -d xxxxxx 可指定要减压到的位置。 tar [-cxtzjvf] 文件与目录 .... 参数&…

python自动化之用flask库写一个登陆接口(代码示例)

用到的库&#xff1a; 1、flask&#xff08;写接口&#xff09; 2、cerberus&#xff08;校验数据&#xff09; 实现效果&#xff1a;输入账号和密码&#xff0c;校验数据类型是否是字符串&#xff0c;如果是&#xff0c;返回登陆成功&#xff1b;如果不是&#xff0c;返回数…

Kotlin 中 is 关键字的作用与智能类型转换

联系我 Kotlin 中 is 关键字的作用与智能类型转换 在Kotlin编程语言中&#xff0c;is关键字用于类型检查&#xff0c;它相当于Java中的instanceof操作符。类型检查是确保一个对象是否属于某个特定类型的过程&#xff0c;而Kotlin在类型检查的基础上还提供了智能类型转换功能&…

UnityHub 无法添加模块问题

文章目录 1.问题描述2.问题解决 1.问题描述 在Hub中无法添加模块 2.问题解决 1、点击设置 2、设置版本安装位置 可以发现installs的安装位置路径设置不是unity安装位置&#xff0c;这里我们更改成自己电脑unity安装位置的上一级路径 添加模块正常&#xff1a;

EtherCAT主站IGH-- 14 -- IGH之fsm_coe.h/c文件解析

EtherCAT主站IGH-- 14 -- IGH之fsm_coe.h/c文件解析 0 预览一 该文件功能`coe_fsm.c` 文件功能函数预览二 函数功能介绍1. `ec_fsm_coe_dict_start`2. `ec_fsm_coe_dict_request`3. `ec_fsm_coe_dict_check`4. `ec_fsm_coe_dict_response`5. `ec_fsm_coe_dict_response_data`6.…

【C++】哈希表的模拟实现及 unordered_set 和 unorderded_map 的封装

目录 前言一、哈希表的模拟实现1.1 哈希表的改造1.1.1 模板参数列表的改造1.1.2 增加迭代器操作 1.2 哈希表的模拟实现1.2.1 哈希表中仿函数的实现1.2.2 哈希表中节点类的实现1.2.3 哈希表中迭代器类的实现1.2.4 哈希表中构造函数、析构函数和 Clear() 函数的实现1.2.5 哈希表中…

阐述 C 语言中的浮点数精度问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

从零开始学习嵌入式----C语言函数指针

C语言的函数指针&#xff1a;从入门到深入理解 函数指针是C语言中一个强大且灵活的特性&#xff0c;它允许我们将函数作为参数传递给其他函数&#xff0c;或者将函数存储在数据结构中。正确理解和使用函数指针可以帮助我们编写更加模块化、高效和可扩展的代码。 一、 什么是函数…

matlab支持向量机使用错误

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

ROS的TF系统

一、SLAM 1、SLAM全称是Simultaneous Localization And Mapping&#xff0c;即同时定位与地图构建 2、SLAM软件包Hector_Mapping&#xff0c;←建图可参考链接所示文章 二、机器人定位 1、假设机器人开始建图的位置是地图坐标系的原点 2、则机器人在建图过程中的位置可以描…

DenseNet算法实现乳腺癌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前期准备 1.设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import …

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录 Day4

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

如何检测社交媒体平台中的深度伪造

在过去的十年中,各类社交媒体平台——连接人们并让他们通过多媒体内容(如图像、视频、音频和文本)分享他们的想法和意见——也被用于操纵和改变公众意见。社交媒体上的自动程序,如机器人,可以像合法的用户一样控制虚假账户,通过点赞、分享和发布内容来传播虚假信息。随着…