목차
概念
后端
前端
事件
测量条
백엔드와 프런트엔드 간에 데이터를 공유하는 두 가지 주요 구성 요소는 바인딩과 이벤트입니다.
백엔드 개발 Golang Go Wails 프레임워크를 사용하여 데스크톱 애플리케이션을 구축하는 예

Go Wails 프레임워크를 사용하여 데스크톱 애플리케이션을 구축하는 예

Jun 24, 2020 pm 05:56 PM
go golang

Go Wails 프레임워크를 사용하여 데스크톱 애플리케이션을 구축하는 예예를 들어, Wails 프레임워크를 사용하여 Go 및 Vue.js로 데스크톱 애플리케이션을 구축할 수 있습니다.

이것은 아직 베타 버전인 새로운 프레임워크이지만 애플리케이션을 개발하고 구축하는 것이 얼마나 쉬운지 놀랐습니다.

Wails는 Go 코드와 웹 프런트엔드를 단일 바이너리로 패키징하는 기능을 제공합니다. Wails CLI를 사용하면 프로젝트 생성, 컴파일 및 패키징을 처리하여 이를 쉽게 수행할 수 있습니다.

App

우리는 내 컴퓨터의 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.gogo.mod 파일과 함께 다른 종속성을 포함하여 이를 관리할 수 있는 진입점이 됩니다. frontend 폴더에는 Vue.js 구성 요소, webpack 및 CSS가 포함되어 있습니다.

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

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])),
    }
}
로그인 후 복사

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

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

概念

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

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

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

后端

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

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

pkg/sys/sys.go:

window.backend.Stats.GetCPUUsage().then(cpu_usage => {
    console.log(cpu_usage);
})
로그인 후 복사

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

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

wails build -d
./cpustats
로그인 후 복사
로그인 후 복사

前端

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

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
}
로그인 후 복사

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

让我们通过简单地在屏幕上显示 CPU 使用值来测试它是否工作。

mounted: function() {
    wails.events.on("cpu_usage", cpu_usage => {
        if (cpu_usage) {
            console.log(cpu_usage.avg);
        }
    });
}
로그인 후 복사

事件

我们使用绑定将 CPU 使用值发送到前端,现在让我们尝试不同的方法,让我们在后台创建一个计时器,它将使用事件方法在后台发送 CPU 使用值。然后我们可以订阅 Javascript 中的事件。

在 Go 中,我们可以在 WailsInit 函数中实现:

npm install --save apexcharts
npm install --save vue-apexcharts
로그인 후 복사

在 Vue.js 中,我们可以在组件挂载(或任何其他地方)时订阅此事件:

import VueApexCharts from 'vue-apexcharts'

Vue.use(VueApexCharts)
Vue.component('apexchart', VueApexCharts)
로그인 후 복사

测量条

如果使用一个测量条来显示 CPU 的使用情况就好了,因此我们将包含一个第三方依赖项,只需使用 npm 即可:

<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>
로그인 후 복사

然后导入 main.js 文件:

wails build -d
./cpustats
로그인 후 복사
로그인 후 복사

现在,我们可以使用 apexcharts 显示 CPU 使用情况,并通过从后端接收事件来更新组件的值:

rrreee

要更改样式,我们可以直接修改 src/assets/css/main 개념

백엔드와 프런트엔드 간에 데이터를 공유하는 두 가지 주요 구성 요소는 바인딩과 이벤트입니다.

바인딩은 Go 코드를 프런트 엔드에 노출(바인딩)할 수 있는 단일 방법입니다. Go Wails 프레임워크를 사용하여 데스크톱 애플리케이션을 구축하는 예

또한 Wails는 Javascript의 로컬 이벤트 시스템과 유사한 통합 이벤트 시스템도 제공합니다. 이는 Go 또는 Javascript에서 전송된 모든 이벤트를 어느 쪽에서든 수신할 수 있음을 의미합니다. 데이터는 모든 이벤트와 함께 전달될 수 있습니다. 이를 통해 Go에서 백그라운드 프로세스를 실행하고 업데이트를 프런트엔드에 알리는 등 우아한 작업을 수행할 수 있습니다.

Backend

먼저 CPU 사용량을 가져온 다음 bind 메서드를 사용하여 이를 프런트엔드로 보내는 백엔드 부분을 개발해 보겠습니다. 🎜🎜새 패키지를 만들고 프런트엔드에 노출(바인딩)할 유형을 정의하겠습니다. 🎜🎜pkg/sys/sys.go:🎜rrreee🎜구조물에 WailsInit 메서드가 있는 경우 Wails는 시작 시 이를 호출합니다. 이를 통해 기본 애플리케이션이 시작되기 전에 일부 초기화를 수행할 수 있습니다. 🎜🎜main.gosys 패키지를 도입하고 Stats 인스턴스를 바인딩하여 프런트 엔드로 반환합니다: 🎜rrreee🎜Front end🎜 🎜프론트 엔드에서 window.backend.Stats에 의해 호출될 수 있는 stats 인스턴스를 Go Binds에서 시작합니다. GetCPUUsage() 함수를 호출하려는 경우 응답이 반환됩니다. 🎜rrreee🎜전체 프로젝트를 단일 바이너리로 빌드하려면 wails 빌드를 실행해야 합니다. 이는 디버그 가능한 버전을 빌드하기 위해 -d 플래그를 추가하여 수행할 수 있습니다. 프로젝트 이름과 일치하는 이름의 바이너리 파일이 생성됩니다. 🎜🎜CPU 사용량 값을 화면에 간단히 표시하여 작동하는지 테스트해 보겠습니다. 🎜rrreee🎜Events🎜🎜우리는 바인딩을 사용하여 CPU 사용량 값을 프런트엔드로 보내고 있습니다. 이제 다른 접근 방식을 시도해 보겠습니다. 백그라운드에서 이벤트 메서드를 사용하여 CPU 사용량 값을 보내는 타이머를 백그라운드에 만들어 보겠습니다. 그런 다음 Javascript에서 이벤트를 구독할 수 있습니다. 🎜🎜Go에서는 WailsInit 함수에서 이 작업을 수행할 수 있습니다. 🎜rrreee🎜Vue.js에서는 구성 요소가 마운트될 때(또는 다른 곳에서) 이 이벤트를 구독할 수 있습니다. 🎜rrreee🎜 측정 Bar 🎜🎜 CPU 사용량을 표시하는 측정 막대가 있으면 좋을 것이므로 타사 종속성을 포함하겠습니다. npm을 사용하세요. 🎜rrreee🎜 그런 다음 main.js를 가져옵니다. code> 파일: 🎜rrreee🎜 이제 apexccharts를 사용하여 CPU 사용량을 표시하고 백엔드에서 이벤트를 수신하여 구성 요소의 값을 업데이트할 수 있습니다. 🎜rrreee🎜스타일을 변경하려면 <code>src/assets/css/main을 직접 수정할 수 있습니다. 를 사용하거나 구성요소에서 정의하세요. 🎜🎜마지막으로 빌드하고 실행합니다. 🎜rrreee🎜🎜🎜🎜추천 튜토리얼: "🎜Go Tutorial🎜"🎜

위 내용은 Go Wails 프레임워크를 사용하여 데스크톱 애플리케이션을 구축하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까? Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까? Jun 06, 2024 pm 05:14 PM

Go에서는 안전하게 파일을 읽고 쓰는 것이 중요합니다. 지침은 다음과 같습니다. 파일 권한 확인 지연을 사용하여 파일 닫기 파일 경로 유효성 검사 컨텍스트 시간 초과 사용 다음 지침을 따르면 데이터 보안과 애플리케이션의 견고성이 보장됩니다.

Golang 데이터베이스 연결을 위한 연결 풀을 구성하는 방법은 무엇입니까? Golang 데이터베이스 연결을 위한 연결 풀을 구성하는 방법은 무엇입니까? Jun 06, 2024 am 11:21 AM

Go 데이터베이스 연결을 위한 연결 풀링을 구성하는 방법은 무엇입니까? 데이터베이스 연결을 생성하려면 데이터베이스/sql 패키지의 DB 유형을 사용하고, 최대 동시 연결 수를 제어하려면 MaxIdleConns를 설정하고, 연결의 최대 수명 주기를 제어하려면 ConnMaxLifetime을 설정하세요.

JSON 데이터를 Golang의 데이터베이스에 저장하는 방법은 무엇입니까? JSON 데이터를 Golang의 데이터베이스에 저장하는 방법은 무엇입니까? Jun 06, 2024 am 11:24 AM

JSON 데이터는 gjson 라이브러리 또는 json.Unmarshal 함수를 사용하여 MySQL 데이터베이스에 저장할 수 있습니다. gjson 라이브러리는 JSON 필드를 구문 분석하는 편리한 방법을 제공하며, json.Unmarshal 함수에는 JSON 데이터를 비정렬화하기 위한 대상 유형 포인터가 필요합니다. 두 방법 모두 SQL 문을 준비하고 삽입 작업을 수행하여 데이터를 데이터베이스에 유지해야 합니다.

Golang 프레임워크 vs. Go 프레임워크: 내부 아키텍처와 외부 기능 비교 Golang 프레임워크 vs. Go 프레임워크: 내부 아키텍처와 외부 기능 비교 Jun 06, 2024 pm 12:37 PM

GoLang 프레임워크와 Go 프레임워크의 차이점은 내부 아키텍처와 외부 기능에 반영됩니다. GoLang 프레임워크는 Go 표준 라이브러리를 기반으로 하며 기능을 확장하는 반면, Go 프레임워크는 특정 목적을 달성하기 위해 독립적인 라이브러리로 구성됩니다. GoLang 프레임워크는 더 유연하고 Go 프레임워크는 사용하기 더 쉽습니다. GoLang 프레임워크는 성능 면에서 약간의 이점이 있고 Go 프레임워크는 확장성이 더 좋습니다. 사례: gin-gonic(Go 프레임워크)은 REST API를 구축하는 데 사용되고 Echo(GoLang 프레임워크)는 웹 애플리케이션을 구축하는 데 사용됩니다.

프론트 엔드에서 백엔드 개발로 전환하면 Java 또는 Golang을 배우는 것이 더 유망합니까? 프론트 엔드에서 백엔드 개발로 전환하면 Java 또는 Golang을 배우는 것이 더 유망합니까? Apr 02, 2025 am 09:12 AM

백엔드 학습 경로 : 프론트 엔드에서 백엔드 초보자로서 프론트 엔드에서 백엔드까지의 탐사 여행은 프론트 엔드 개발에서 변화하는 백엔드 초보자로서 이미 Nodejs의 기초를 가지고 있습니다.

GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? Apr 02, 2025 pm 04:12 PM

GO의 어떤 라이브러리가 대기업이나 잘 알려진 오픈 소스 프로젝트에서 개발 했습니까? GO에 프로그래밍 할 때 개발자는 종종 몇 가지 일반적인 요구를 만납니다.

Golang의 목적 : 효율적이고 확장 가능한 시스템 구축 Golang의 목적 : 효율적이고 확장 가능한 시스템 구축 Apr 09, 2025 pm 05:17 PM

Go Language는 효율적이고 확장 가능한 시스템을 구축하는 데 잘 작동합니다. 장점은 다음과 같습니다. 1. 고성능 : 기계 코드로 컴파일, 빠른 달리기 속도; 2. 동시 프로그래밍 : 고어 라틴 및 채널을 통한 멀티 태스킹 단순화; 3. 단순성 : 간결한 구문, 학습 및 유지 보수 비용 절감; 4. 크로스 플랫폼 : 크로스 플랫폼 컴파일, 쉬운 배포를 지원합니다.

Golang vs. Python : 성능 및 확장 성 Golang vs. Python : 성능 및 확장 성 Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

See all articles