suchen
HeimBackend-EntwicklungGolangBeispiel für die Erstellung einer Desktop-Anwendung mit dem Go Wails-Framework

Beispiel für die Erstellung einer Desktop-Anwendung mit dem Go Wails-Framework

Wie wir alle wissen, ist Go Wird hauptsächlich zum Erstellen von APIs, Web-Backends und CLI-Tools verwendet. Aber das Interessante ist, dass Go an Orten eingesetzt werden kann, die wir nicht erwartet haben.

Zum Beispiel können wir mithilfe des Wails-Frameworks eine Desktop-Anwendung mit Go und Vue.js erstellen.

Dies ist ein neues Framework, noch in der Betaphase, aber ich war überrascht, wie einfach es ist, Anwendungen zu entwickeln und zu erstellen.

Wails bietet die Möglichkeit, Go-Code und Web-Frontend in einer einzigen Binärdatei zu packen. Wails CLI erleichtert Ihnen dies, indem es die Erstellung, Kompilierung und Verpackung von Projekten übernimmt.

Anwendung

Wir werden eine sehr einfache App erstellen, um die CPU-Auslastung meiner Maschine in Echtzeit anzuzeigen. Wenn Sie Zeit haben und Wails mögen, können Sie sich etwas Kreativeres und Komplexeres einfallen lassen.

Installation

Die Wails-CLI kann mit go get installiert werden. Nach der Installation sollten Sie zum Einrichten den Befehl wails setup verwenden.

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

Dann lasst uns unser Projekt starten mit cpustats:

wails init
cd cpustats

Unser Projekt umfasst ein Go-Backend und ein Vue.js-Frontend. main.go wird unser Einstiegspunkt sein, an dem wir alle anderen Abhängigkeiten zusammen mit go.mod Dateien zu deren Verwaltung einbinden können. Der Ordner frontend enthält Vue.js-Komponenten, Webpack und CSS.

Konzepte

Es gibt zwei Hauptkomponenten für den Datenaustausch zwischen Backend und Frontend: Bindungen und Ereignisse.

Bindung ist eine einzelne Methode, mit der Sie Ihren Go-Code am Frontend verfügbar machen (binden) können.

Darüber hinaus bietet Wails auch ein einheitliches Ereignissystem, ähnlich dem lokalen Ereignissystem von Javascript. Dies bedeutet, dass jedes von Go oder Javascript gesendete Ereignis von beiden Parteien empfangen werden kann. Daten können zusammen mit jedem Ereignis übergeben werden. Dies ermöglicht Ihnen elegante Dinge wie die Ausführung eines Hintergrundprozesses in Go und die Benachrichtigung des Frontends über alle Aktualisierungen.

Backend

Lassen Sie uns zunächst einen Backend-Teil entwickeln, der die CPU-Auslastung erfasst und diese dann mithilfe der bind-Methode an das Frontend sendet.

Wir werden ein neues Paket erstellen und einen Typ definieren, den ich dem Frontend zur Verfügung stellen (binden) werde.

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])),
    }
}

Wenn Ihre Struktur eine WailsInit-Methode hat, ruft Wails diese beim Start auf. Dadurch können Sie vor dem Start der Hauptanwendung einige Initialisierungen durchführen.

Führen Sie das main.go-Paket in sys ein und binden Sie die Stats-Instanz wieder an das Front-End:

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()
}

Front-end

Wir haben -Instanz, die im Frontend stats aufgerufen werden kann. Wenn wir die Funktion window.backend.Stats aufrufen möchten, erhalten wir eine Antwort. GetCPUUsage()

window.backend.Stats.GetCPUUsage().then(cpu_usage => {
    console.log(cpu_usage);
})
Um das gesamte Projekt in einer einzigen Binärdatei zu erstellen, sollten wir

ausführen. Dies kann durch Hinzufügen des Flags wails build erfolgen, um eine debuggbare Version zu erstellen. Es wird eine Binärdatei mit einem Namen erstellt, der mit dem Projektnamen übereinstimmt. -d

Testen wir, ob es funktioniert, indem wir einfach den CPU-Auslastungswert auf dem Bildschirm anzeigen.

wails build -d
./cpustats
Ereignisse

Wir verwenden die Bindung, um den CPU-Nutzungswert an das Frontend zu senden. Jetzt versuchen wir einen anderen Ansatz: Erstellen wir einen Timer im Hintergrund, der im Hintergrund verwendet wird die Ereignismethode CPU-Auslastungswert senden. Anschließend können wir die Veranstaltung in Javascript abonnieren.

In Go können wir dies in der Funktion

tun: 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
}
In Vue.js können wir dieses Ereignis abonnieren, wenn die Komponente gemountet wird (oder irgendwo anders):

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

Es wäre schön, eine Messleiste zu haben, um die CPU-Auslastung anzuzeigen, daher werden wir eine Abhängigkeit von Drittanbietern einbeziehen, verwenden Sie einfach

:npm

npm install --save apexcharts
npm install --save vue-apexcharts
und importieren Sie dann die

-Datei: main.js

import VueApexCharts from 'vue-apexcharts'

Vue.use(VueApexCharts)
Vue.component('apexchart', VueApexCharts)
Jetzt können wir apexccharts verwenden, um die CPU-Auslastung anzuzeigen und den Wert der Komponente zu aktualisieren, indem wir Ereignisse vom Backend empfangen:

<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>
Um Stile zu ändern können wir

direkt ändern oder in Komponenten definieren. src/assets/css/main

Zum Schluss erstellen und ausführen

wails build -d
./cpustats

Beispiel für die Erstellung einer Desktop-Anwendung mit dem Go Wails-Framework

Empfohlenes Tutorial: „

Go Tutorial

Das obige ist der detaillierte Inhalt vonBeispiel für die Erstellung einer Desktop-Anwendung mit dem Go Wails-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:learnku. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Geben Sie Behauptungen ein und geben Sie Schalter mit GO -Schnittstellen einGeben Sie Behauptungen ein und geben Sie Schalter mit GO -Schnittstellen einMay 02, 2025 am 12:20 AM

GoHandlesInterfacesAndTypeassertionSeffective, EnhancingCodeFlexibilityandrobustness.1) TypenSerionsallowruntimetypeCking, AsseenWithThapeInterfaceandCircletype.2) TypeSwitcheshandlemultipletypesiepy, nützlich, nützlich, nützlich

Verwenden von fehlern.is und fehler.as für die Fehlerinspektion in GOVerwenden von fehlern.is und fehler.as für die Fehlerinspektion in GOMay 02, 2025 am 12:11 AM

GO -Sprachfehlerhandhabung wird flexibler und durch Fehler lesbarer. IS und Fehler.as Funktionen. 1.Erors.IS wird verwendet, um zu prüfen, ob der Fehler dem angegebenen Fehler entspricht und für die Verarbeitung der Fehlerkette geeignet ist. 2.Errors.as können nicht nur den Fehlertyp überprüfen, sondern auch den Fehler in einen bestimmten Typ konvertieren, der zum Extrahieren von Fehlerinformationen geeignet ist. Die Verwendung dieser Funktionen kann die Fehlerbehandlungslogik der Fehlerbehandlung vereinfachen, aber auf die korrekte Abgabe von Fehlerketten achten und eine übermäßige Abhängigkeit vermeiden, um die Komplexität der Code zu verhindern.

Leistungsstimmung in Go: Optimierung Ihrer AnwendungenLeistungsstimmung in Go: Optimierung Ihrer AnwendungenMay 02, 2025 am 12:06 AM

TomakegoapplicationsRunfasterandmorefficenty, UseProfilingTools, LeveragEconcurrency und Managemoryeffectiv.1) UsePPRofforCpuandMemoryProfilingToidentifyBottlenecks.2) NutzungsgoroutinesandchannelstoparallelizeTakesAmproveProveperance.3) Implementierung

Die Zukunft von Go: Trends und EntwicklungenDie Zukunft von Go: Trends und EntwicklungenMay 02, 2025 am 12:01 AM

GO'SfutureIsBrightWithTrends aseimpultedTooling, Generika, Cloud-Nativadoption, PerformanceNHancements und Webassemblyintegration, ButchalenGesincludemaintainingImplication undImProventerrorhandling.

Goroutines verstehen: Ein tiefes Eintauchen in die Parallelität von GoGoroutines verstehen: Ein tiefes Eintauchen in die Parallelität von GoMay 01, 2025 am 12:18 AM

GoroutinesareFunctionsOrtheThatrunConcruncurentoingo, aktivieren, dass und leuchtet die Wutzehnung

Verständnis der Init -Funktion in Go: Zweck und VerwendungVerständnis der Init -Funktion in Go: Zweck und VerwendungMay 01, 2025 am 12:16 AM

ThepurpleTheinitfunctioningoinitializeVariables, Setupconfigurationen, orperformN -nötiger SetupBeforeThemaNFunctionexecutes

Verständnis GO -Schnittstellen: Ein umfassender LeitfadenVerständnis GO -Schnittstellen: Ein umfassender LeitfadenMay 01, 2025 am 12:13 AM

GointerfacesAremethodSignaturesSetShattypesMustImplement, EnablingPolymorphism mit der Outinheritanceforcleaner, modularCode.

Erholung von Panik in Go: Wann und wie man recover () verwendet ()Erholung von Panik in Go: Wann und wie man recover () verwendet ()May 01, 2025 am 12:04 AM

Verwenden Sie die Funktion resocal (), um sich von Panik zu erholen. Die spezifischen Methoden sind: 1) Verwenden Sie Recover (), um Panik in der Aufschubfunktion zu erfassen, um Programmabstürze zu vermeiden. 2) detaillierte Fehlerinformationen zum Debuggen aufzeichnen; 3) entscheiden, ob die Programmausführung auf der Grundlage der spezifischen Situation wieder aufgenommen werden soll; 4) Verwenden Sie mit Vorsicht, um die Leistung zu vermeiden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software