Go Wails 框架构建桌面应用示例


本文摘自php中文网,作者Guanhui,侵删。

众所周知,Go 主要用于构建 API、web 后端和 CLI 工具。但有趣的是,Go 可以用在我们没有预料到的地方。

例如,我们可以使用 Wails 框架用 Go 和 Vue.js 构建一个桌面应用程序。

这是一个新框架,还在测试阶段,但我很惊讶,用它可以很容易的开发,建立应用程序。

Wails 提供了将 Go 代码和 web 前端打包成单一二进制文件的能力。Wails CLI 通过处理项目创建、编译和打包,使您可以轻松地完成这项工作。

应用程序

我们将构建一个非常简单的应用程序来实时显示我的机器的 CPU 使用情况。如果你有时间,喜欢 Wails,你可以想出一些更有创意和更复杂的东西。

安装

Wails CLI 可以使用 go get 安装。安装之后,你应该使用 wails setup 命令进行设置。

1

2

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

wails setup

然后让我们用 cpustats 来启动我们的项目:

1

2

wails init

cd cpustats

我们的项目包括 Go 后端和 Vue.js 前端。main.go 将是我们的入口点,我们可以在其中包含任何其他依赖项,还有 go.mod 文件来管理它们。frontend 文件夹包含 Vue.js 组件,webpack 和 CSS。

概念

有两个主要组件用于在后端和前端之间共享数据:绑定和事件。

绑定是一个单一的方法,它允许你向前端公开(绑定)你的 Go 代码。

此外,Wails 还提供了一个统一的事件系统,类似于 Javascript 的本地事件系统。这意味着从 Go 或 Javascript 发送的任何事件都可以由任何一方接收。数据可以随任何事件一起传递。这允许你做一些优雅的事情,比如让后台进程在 Go 中运行,并通知前端任何更新。

后端

让我们先开发一个后端部分,获取 CPU 使用情况,然后使用 bind 方法将其发送到前端。

我们将创建一个新的包,并定义一个类型,我将公开(绑定)到前端。

pkg/sys/sys.go:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

package sys

 

import (

    "math"

    "time"

 

    "github.com/shirou/gopsutil/cpu"

    "github.com/wailsapp/wails"

)

 

// Stats .

type Stats struct {

    log *wails.CustomLogger

}

 

// CPUUsage .

type CPUUsage struct {

    Average int `json:"avg"`

}

 

// WailsInit .

func (s *Stats) WailsInit(runtime *wails.Runtime) error {

    s.log = runtime.Log.New("Stats")

    return nil

}

 

// GetCPUUsage .

func (s *Stats) GetCPUUsage() *CPUUsage {

    percent, err := cpu.Percent(1*time.Second, false)

    if err != nil {

        s.log.Errorf("unable to get cpu stats: %s", err.Error())

        return nil

    }

 

    return &CPUUsage{

        Average: int(math.Round(percent[0])),

    }

}

如果你的结构体有一个 WailsInit 方法,Wails 将在启动时调用它。这允许您在主应用程序启动之前进行一些初始化。

main.go 中引入 sys 这个包,绑定 Stats 实例返回给前端:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

package main

 

import (

    "github.com/leaanthony/mewn"

    "github.com/plutov/packagemain/cpustats/pkg/sys"

    "github.com/wailsapp/wails"

)

 

func main() {

    js := mewn.String("./frontend/dist/app.js")

    css := mewn.String("./frontend/dist/app.css")

 

    stats := &sys.Stats{}

 

    app := wails.CreateApp(&wails.AppConfig{

        Width:  512,

        Height: 512,

        Title:  "CPU Usage",

        JS:     js,

        CSS:    css,

        Colour: "#131313",

    })

    app.Bind(stats)

    app.Run()

}

前端

我们从 Go 绑定了 stats 实例,它可以在前端被 window.backend.Stats 调用。如果我们想调用 GetCPUUsage() 函数 ,它会给我们返回一个应答。

1

2

3

window.backend.Stats.GetCPUUsage().then(cpu_usage => {

    console.log(cpu_usage);

})

要将整个项目构建成单一的二进制文件,我们应该运行 wails build,可以添加 -d 标志来构建一个可调试的版本。它将创建一个名称与项目名称匹配的二进制文件。

阅读剩余部分

相关阅读 >>

Go语言条件语句

Golang中的int占几个字节

Golang 读写锁 sync.rwmutex

Golang变量的数据类型

解析Golang iris怎么使用

Gosumdb 设置私库

Golang 实现 rsa 的加密解密

测试平台(序)

Golang并发编程是什么

聊聊dubbo-Go-proxy的recoveryfilter

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...