golang 哪些gui工具

东白随记
0 评论
/ /
153 阅读
/
14534 字
04 2008-10

在 Go 语言中,有几种流行的 GUI 库和工具可以用来构建桌面应用程序。由于 Go 语言的主要应用场景在于服务器端开发,GUI 库并不像其他语言(如 JavaScript、Python)那样丰富,但也有一些不错的选择。

以下是一些常见的 Go GUI 库和工具:

1. Fyne

  • 介绍: Fyne 是一个现代化的、跨平台的 Go 语言 GUI 库,支持 Windows、macOS、Linux、iOS 和 Android。
  • 特性: 简单易用,现代化设计,支持响应式布局和高级主题,原生图形和文本渲染,丰富的组件。
  • 安装:

    bash

    go get fyne.io/fyne/v2

  • 示例代码:

    go

    package main

    import (

    "fyne.io/fyne/v2/app"

    "fyne.io/fyne/v2/container"

    "fyne.io/fyne/v2/widget"

    )

    func main() {

    myApp := app.New()

    myWindow := myApp.NewWindow("Hello")

    myWindow.SetContent(container.NewVBox(

    widget.NewLabel("Hello Fyne!"),

    widget.NewButton("Quit", func() {

    myApp.Quit()

    }),

    ))

    myWindow.ShowAndRun()

    }

  • 官网: https://fyne.io

2. Gio

  • 介绍: Gio 是一个快速的跨平台 GUI 框架,使用 Go 语言编写,专注于高性能和灵活性。它主要针对桌面和移动应用。
  • 特性: 轻量级、无依赖的、跨平台支持(Windows、macOS、Linux、Android、iOS)、响应式布局。
  • 安装:

    bash

    go get gioui.org

  • 示例代码:

    go

    package main

    import (

    "gioui.org/app"

    "gioui.org/io/system"

    "gioui.org/layout"

    "gioui.org/op"

    "gioui.org/widget/material"

    "gioui.org/unit"

    "gioui.org/font/gofont"

    )

    func main() {

    go func() {

    w := app.NewWindow()

    th := material.NewTheme(gofont.Collection())

    var ops op.Ops

    for e := range w.Events() {

    switch e := e.(type) {

    case system.FrameEvent:

    gtx := layout.NewContext(&ops, e)

    layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions {

    return material.H1(th, "Hello Gio!").Layout(gtx)

    })

    e.Frame(gtx.Ops)

    case system.DestroyEvent:

    return

    }

    }

    }()

    app.Main()

    }

  • 官网: https://gioui.org

3. Walk

  • 介绍: Walk 是一个用于 Windows 平台的 GUI 库,基于 Go 语言。它提供了对 Windows GUI 控件的良好封装。
  • 特性: 原生 Windows 支持,简单的 API,强大的控件集,适合开发 Windows 桌面应用程序。
  • 安装:

    bash

    go get github.com/lxn/walk

  • 示例代码:

    go

    package main

    import (

    "github.com/lxn/walk"

    . "github.com/lxn/walk/declarative"

    )

    func main() {

    MainWindow{

    Title: "Hello Walk",

    MinSize: Size{300, 200},

    Layout: VBox{},

    Children: []Widget{

    Label{

    Text: "Hello Walk!",

    },

    PushButton{

    Text: "Exit",

    OnClicked: func() {

    walk.App().Exit(0)

    },

    },

    },

    }.Run()

    }

  • 官网: https://github.com/lxn/walk

4. Wails

  • 介绍: Wails 是一个使用 Go 和 Web 技术(HTML/CSS/JavaScript)构建桌面应用程序的框架,类似于 Electron,但使用 Go 语言作为后端。
  • 特性: 跨平台(Windows、macOS、Linux),快速开发,无需浏览器运行时,集成了前端框架(如 Vue、React、Svelte 等)。
  • 安装:

    bash

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

  • 示例代码: 使用 Wails 创建一个新项目并运行:

    bash

    wails init

    wails dev

  • 官网: https://wails.io

5. Qt (GoQt 或另一个绑定)

  • 介绍: Qt 是一个流行的 C++ GUI 框架,可以通过 Go 绑定(如 go-qmltherecipe/qt)来使用。therecipe/qt 是一个较为完整的 Qt 绑定。
  • 特性: 功能强大,丰富的控件支持,跨平台(Windows、macOS、Linux),支持现代桌面应用开发。
  • 安装:

    bash

    go get github.com/therecipe/qt

  • 官网: https://github.com/therecipe/qt

选择合适的工具

  • 跨平台支持: 如果需要跨平台支持(Windows、macOS、Linux、移动端),FyneGio 是不错的选择。
  • 平台特定: 如果主要开发 Windows 应用,Walk 是一个简单易用的工具。
  • 前端框架集成: Wails 可以让你使用现代前端技术(如 React、Vue 等)来开发桌面应用程序,非常适合有 Web 开发经验的开发者。
  • 强大和全面: 如果需要一个功能齐全的 GUI 框架,Qt 是一个非常强大的选择,但它的绑定和配置相对复杂。

每个工具都有其优势和适用场景,选择时应根据项目需求、平台目标和开发者熟悉程度来决定。