编程 go使用 Wails 构建轻量级桌面应用:仿微信登录界面 Demo

2024-11-18 22:57:54 +0800 CST views 994

使用 Wails 构建轻量级桌面应用:仿微信登录界面 Demo

本文将介绍如何使用 Wails 框架来构建一个仿微信登录界面的桌面应用。此框架利用 Go 的性能优势,结合任何前端技术(如 React、Vue、Svelte),实现高效且轻量级的跨平台桌面应用。项目源码可在 GitHub 上获取。

为什么选择 Wails?

  • 更小的应用体积:Wails 编译的应用程序体积较小,无需嵌入浏览器引擎。
  • 原生性能:Wails 基于 Go 的性能优势,特别适合需要高并发和系统级操作的应用。
  • 简化的构建流程:一条命令即可构建并打包应用,极大简化了操作。
  • 灵活的前端选择:支持使用任何前端框架来开发用户界面,提供丰富的开发体验。

环境配置与项目创建

安装 Wails

确保已安装 Go 和 Node.js。通过以下命令安装 Wails:

go install github.com/wailsapp/wails/v2/cmd/wails@latest

验证安装结果:

wails version

创建新项目

在项目目录中,使用 Wails CLI 创建一个新项目:

wails init -n go-run-wechat-demo -t react-ts

项目结构概览

  • main.go 和 app.go:包含业务逻辑、数据管理及与前端的通信。
  • frontend:前端代码,使用 React、Vue 或其他框架构建用户界面。
  • go.mod 和 go.sum:Go 的模块依赖文件。
  • wails.json:Wails 的配置文件。
  • build:构建后的应用程序及资源文件。

开发流程

进入项目根目录并运行开发命令:

wails dev

此时可通过浏览器调试页面,且支持实时更新。

界面布局与逻辑实现

  1. 窗口样式设置
    main.go 文件中设置应用窗口的宽高、背景色及标题:

    func main() {
        app := NewApp()
        err := wails.Run(&options.App{
            Title:  "WeChat",
            Width:  280,
            Height: 400,
            BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 1},
            OnStartup: app.startup,
            Bind: []interface{}{app},
        })
    
        if err != nil {
            println("Error:", err.Error())
        }
    }
    
  2. 后端功能实现
    app.go 文件中定义登录和切换账号的两个方法:

    func (a *App) LogInSuccess(name string) string {
        return fmt.Sprintf("Welcome %s, You are logged in!", name)
    }
    
    func (a *App) SwitchAccountSuccess() string {
        return "You have switched accounts!"
    }
    
  3. 前端界面实现
    修改 frontend/src/App.tsx 文件,添加前端逻辑和界面元素:

    import {useState} from "react";
    import {LogInSuccess, SwitchAccountSuccess} from "../wailsjs/go/main/App";
    
    function App() {
        const [resultText, setResultText] = useState("");
        const name = "除";
    
        function logIn() {
            LogInSuccess(name).then(setResultText);
        }
    
        function switchAccount() {
            SwitchAccountSuccess().then(setResultText);
        }
    
        return (
            <div id="App">
                <div id="result" className="result name">{resultText || name}</div>
                <button className="btn log-in" onClick={logIn}>Log In</button>
                <button className="btn switch-account" onClick={switchAccount}>Switch Account</button>
            </div>
        );
    }
    export default App;
    
  4. 自定义样式
    修改 frontend/src/App.css 以适配界面布局:

    .btn {
        display: block;
        margin: 0 auto;
        font-size: 14px;
    }
    .log-in {
        width: 200px;
        background-color: hsla(148, 61%, 46%, 1);
    }
    .switch-account {
        color: rgb(89, 107, 144);
        margin-top: 22px;
    }
    

打包与发布

运行以下命令打包应用程序:

wails build -clean

macOS 和 Windows 平台的打包

  • macOS:
    wails build -platform=darwin/amd64
    
  • Windows:
    wails build -platform=windows/amd64
    

以上步骤完成后,即可在 GitHub Releases 页面发布构建包。


总结

Wails 框架为开发者提供了轻量级的跨平台桌面应用开发体验,结合 Go 的性能和灵活的前端技术栈,适用于需要高性能和小体积的桌面应用开发场景。

复制全文 生成海报 桌面应用 开发框架 跨平台 Go语言

推荐文章

Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
PHP解决XSS攻击
2024-11-19 02:17:37 +0800 CST
pin.gl是基于WebRTC的屏幕共享工具
2024-11-19 06:38:05 +0800 CST
全新 Nginx 在线管理平台
2024-11-19 04:18:33 +0800 CST
介绍Vue3的Tree Shaking是什么?
2024-11-18 20:37:41 +0800 CST
js迭代器
2024-11-19 07:49:47 +0800 CST
批量导入scv数据库
2024-11-17 05:07:51 +0800 CST
rangeSlider进度条滑块
2024-11-19 06:49:50 +0800 CST
CSS 媒体查询
2024-11-18 13:42:46 +0800 CST
软件定制开发流程
2024-11-19 05:52:28 +0800 CST
go命令行
2024-11-18 18:17:47 +0800 CST
Vue3中如何处理组件间的动画?
2024-11-17 04:54:49 +0800 CST
Mysql允许外网访问详细流程
2024-11-17 05:03:26 +0800 CST
deepcopy一个Go语言的深拷贝工具库
2024-11-18 18:17:40 +0800 CST
开发外贸客户的推荐网站
2024-11-17 04:44:05 +0800 CST
从Go开发者的视角看Rust
2024-11-18 11:49:49 +0800 CST
纯CSS实现3D云动画效果
2024-11-18 18:48:05 +0800 CST
一个收银台的HTML
2025-01-17 16:15:32 +0800 CST
PHP 8.4 中的新数组函数
2024-11-19 08:33:52 +0800 CST
MySQL数据库的36条军规
2024-11-18 16:46:25 +0800 CST
55个常用的JavaScript代码段
2024-11-18 22:38:45 +0800 CST
程序员茄子在线接单