搜尋
首頁後端開發GolangGo Wails 框架建立桌面應用範例

Go Wails 框架建立桌面應用範例

Jun 24, 2020 pm 05:56 PM
gogolang

Go Wails 框架建立桌面應用範例

上已知,Go 主要用於建構 API、web 後端與 CLI 工具。但有趣的是,Go 可以用在我們沒有預料到的地方。

例如,我們可以使用 Wails 框架用 Go 和 Vue.js 建立一個桌面應用程式。

這是一個新框架,還在測試階段,但我很驚訝,用它可以輕鬆的開發,建立應用程式。

Wails 提供了將 Go 程式碼和 web 前端打包成單一二進位檔案的能力。 Wails CLI 透過處理專案創建、編譯和打包,讓您可以輕鬆地完成這項工作。

應用程式

我們將建立一個非常簡單的應用程式來即時顯示我的機器的 CPU 使用情況。如果你有時間,喜歡 Wails,你可以想出一些更有創意和更複雜的東西。

安裝

Wails CLI 可以使用 go get 安裝。安裝之後,你應該使用 wails setup 指令來設定。

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

然後讓我們用 cpustats 來啟動我們的專案:

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:

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 實例傳回給前端:

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() 函數 ,它會給我們一個回應。

window.backend.Stats.GetCPUUsage().then(cpu_usage => {
    console.log(cpu_usage);
})

要將整個專案建置成單一的二進位文件,我們應該執行 wails build,可以新增 -d 標誌來建立一個可偵錯的版本。它將建立一個名稱與專案名稱相符的二進位檔案。

讓我們透過簡單地在螢幕上顯示 CPU 使用值來測試它是否運作。

wails build -d
./cpustats

事件

我們使用綁定將CPU 使用值傳送到前端,現在讓我們嘗試不同的方法,讓我們在後台建立一個計時器,它將使用事件方法在後台發送CPU 使用值。然後我們可以訂閱 Javascript 中的事件。

在Go 中,我們可以在WailsInit 函數中實作:

func (s *Stats) WailsInit(runtime *wails.Runtime) error {
    s.log = runtime.Log.New("Stats")

    go func() {
        for {
            runtime.Events.Emit("cpu_usage", s.GetCPUUsage())
            time.Sleep(1 * time.Second)
        }
    }()

    return nil
}

在Vue.js 中,我們可以在元件掛載(或任何其他地方)時訂閱此事件:

mounted: function() {
    wails.events.on("cpu_usage", cpu_usage => {
        if (cpu_usage) {
            console.log(cpu_usage.avg);
        }
    });
}

測量條

如果使用一個測量條來顯示CPU 的使用情況就好了,因此我們將包含一個第三方依賴項,只需使用 npm 即可:

npm install --save apexcharts
npm install --save vue-apexcharts

然後匯入main.js 檔案:

import VueApexCharts from 'vue-apexcharts'

Vue.use(VueApexCharts)
Vue.component('apexchart', VueApexCharts)

現在,我們可以使用apexcharts 顯示CPU 使用情況,並透過從後端接收事件來更新元件的值:

<template>
  <apexchart></apexchart>
</template>

<script>
export default {
  data() {
    return {
      series: [0],
      options: {
        labels: [&#39;CPU Usage&#39;]
      }
    };
  },
  mounted: function() {
    wails.events.on("cpu_usage", cpu_usage => {
      if (cpu_usage) {
        this.series = [ cpu_usage.avg ];
      }
    });
  }
};
</script>

要更改樣式,我們可以直接修改src/assets/css/main,或在元件中定義它們。

最後,建置並執行

wails build -d
./cpustats

Go Wails 框架建立桌面應用範例

推薦教學:《Go教學

以上是Go Wails 框架建立桌面應用範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
了解Goroutines:深入研究GO的並發了解Goroutines:深入研究GO的並發May 01, 2025 am 12:18 AM

goroutinesarefunctionsormethodsthatruncurranceingo,啟用效率和燈威量。 1)shememanagedbodo'sruntimemultimusingmultiplexing,允許千sstorunonfewerosthreads.2)goroutinessimproverentimensImproutinesImproutinesImproveranceThroutinesImproveranceThrountinesimproveranceThroundinesImproveranceThroughEasySytaskParallowalizationAndeff

了解GO中的初始功能:目的和用法了解GO中的初始功能:目的和用法May 01, 2025 am 12:16 AM

purposeoftheInitfunctionoIsistoInitializeVariables,setUpConfigurations,orperformneccesSetarySetupBeforEtheMainFunctionExeCutes.useInitby.UseInitby:1)placingitinyourcodetorunautoamenationally oneraty oneraty oneraty on inity in ofideShortAndAndAndAndForemain,2)keepitiTshortAntAndFocusedonSimImimpletasks,3)

了解GO界面:綜合指南了解GO界面:綜合指南May 01, 2025 am 12:13 AM

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

從恐慌中恢復:何時以及如何使用recover()從恐慌中恢復:何時以及如何使用recover()May 01, 2025 am 12:04 AM

在Go中使用recover()函數可以從panic中恢復。具體方法是:1)在defer函數中使用recover()捕獲panic,避免程序崩潰;2)記錄詳細的錯誤信息以便調試;3)根據具體情況決定是否恢復程序執行;4)謹慎使用,以免影響性能。

您如何使用'字符串”包裝操縱串中的琴弦?您如何使用'字符串”包裝操縱串中的琴弦?Apr 30, 2025 pm 02:34 PM

本文討論了使用GO的“字符串”軟件包進行字符串操作,詳細介紹了共同的功能和最佳實踐,以提高效率並有效地處理Unicode。

您如何使用'加密”在Go中執行加密操作的軟件包?您如何使用'加密”在Go中執行加密操作的軟件包?Apr 30, 2025 pm 02:33 PM

本文使用GO的“加密”軟件包詳細介紹了加密操作,討論了安全實施的關鍵生成,管理和最佳實踐。

您如何使用'時間”處理日期和時間的包裝?您如何使用'時間”處理日期和時間的包裝?Apr 30, 2025 pm 02:32 PM

本文詳細介紹了GO的“時間”包用於處理日期,時間和時區,包括獲得當前時間,創建特定時間,解析字符串以及測量經過的時間。

您如何使用'反映”包裹檢查GO中變量的類型和值?您如何使用'反映”包裹檢查GO中變量的類型和值?Apr 30, 2025 pm 02:29 PM

文章討論了使用GO的“反射”軟件包進行可變檢查和修改,突出顯示方法和性能注意事項。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器