Go语言GUI/图形/图像相关的Go项目列表
目前Go语言主要活跃在区块链、云计算、命令行工具和后端服务等领域。这些领域基本上和GUI关系不大。但是也出现了很多跨平台的Go GUI项目。整理了一份目前GUI/图形/图像相关的Go项目列表。
原生GUI绑定
GUI with Gio
https://jonegil.github.io/gui-with-gio/
Gio 在 Go 中实现了可移植的即时模式 GUI 程序。Gio 程序可在所有主要平台上运行:Linux(Wayland)macOS, iOS, tvOS, Windows,Android,WebAssembly/WebGL 。Gio 包括一个基于 Pathfinder 项目(https://github.com/pcwalton/pathfinder)的高效矢量渲染器。文本和其他形状仅使用其轮廓进行渲染,而无需将其烘焙到纹理图像中,以支持有效的动画、变换后的图形和像素分辨率独立性。
fyne
https://developer.fyne.io/
https://github.com/fyne-io/fyne
Fyne 是一个用 Go 编写的易于使用的 UI 工具包和应用程序 API。 它旨在使用单个代码库构建在桌面和移动设备上运行的应用程序。2.1 版是 Fyne API 的当前版本,它引入了 RichText 和 DocTabs 容器,以及文档存储 API 和 FyneApp.toml 元数据支持。
walk
https://github.com/lxn/walk
Walk 是 Go 编程语言的“Windows 应用程序库工具包”。它主要用于桌面 GUI 开发,但还有一些其他东西。
go-gtk
Go bindings for GTK
https://github.com/mattn/go-gtk
gotk3
https://github.com/gotk3/gotk3
gotk3 项目为 GTK 3 和相关项目提供 Go 绑定。 每个组件都有自己的子目录,用作包的导入路径。
gxui
GXUI - A Go cross platform UI library.
https://github.com/google/gxui
qt
https://github.com/therecipe/qt
Qt 是一个免费的开源小部件工具包,用于创建图形用户界面以及跨平台应用程序,这些应用程序可以在各种软件和硬件平台上运行,而底层代码库几乎没有更改。
go-flutter
https://github.com/go-flutter-desktop/go-flutter
Flutter allows you to build beautiful native apps on iOS and Android from a single codebase.
This unofficial project brings Flutter to the desktop through the power of Go and GLFW.
The flutter engine itself doesn't know how to deal with desktop platforms (eg handling mouse/keyboard input). Instead, it exposes an abstraction layer for whatever platform to implement. This project implements the Flutter's Embedding API using a single code base that runs on Windows, macOS, and Linux. For rendering, GLFW fits the job because it provides the right abstractions over the OpenGL's Buffer/Mouse/Keyboard for each platform.
The choice of Golang comes from the fact that it has the same tooling on every platform. Plus Golang is a great language because it keeps everything simple and readable, which makes it easy to build cross-platform plugins.
GoGi
https://github.com/goki/gi
GoGi is part of the GoKi Go language (golang) full strength tree structure system (ki = 木 = tree in Japanese)
package gi is a scenegraph-based 2D and 3D GUI / graphics interface (Gi) in Go, that functions similar to HTML / CSS / SVG and Qt.
goey
https://bitbucket.org/rj/goey/src/master/
Package goey provides a declarative, cross-platform GUI for the Go language. The range of controls, their supported properties and events, should roughly match what is available in HTML. However, properties and events may be limited to support portability. Additionally, styling of the controls will be limited, with the look of controls matching the native platform.
imgui-go
https://github.com/inkyblackness/imgui-go
This library is a Go wrapper for Dear ImGui.
This wrapper started as a special-purpose wrapper for use within InkyBlackness. However, it is self-contained and can be used for other purposes as well.
nuklear
https://github.com/golang-ui/nuklear
Package nk provides Go bindings for nuklear.h — a small ANSI C gui library. See github.com/vurtun/nuklear.
All the binding code has automatically been generated with rules defined in nk.yml.
There is no idiomatic wrapper package that will make things easier to use, but the original API is pretty straightforward. The nk package is fine for the start, then we'll figure out something better that just a wrapper.
systray
https://github.com/getlantern/systray
systray is a cross-platform Go library to place an icon and menu in the notification area.
Features
Supported on Windows, macOS, and Linux
Menu items can be checked and/or disabled
Methods may be called from any Goroutine
trayhost
https://github.com/shurcooL/trayhost
Package trayhost is a cross-platform Go library to place an icon in the host operating system's taskbar.
Platform Support
macOS - Fully implemented and supported by @dmitshur.
Linux - Partially implemented, but unsupported (needs an owner/maintainer).
Windows - Partially implemented, but unsupported (needs an owner/maintainer).
ui
https://github.com/andlabs/ui
This is a library that aims to provide simple GUI software development in Go. It is based on my libui, a simple cross-platform library that does the same thing, but written in C.
It runs on/requires:
Windows: cgo, Windows Vista SP2 with Platform Update and newer
Mac OS X: cgo, Mac OS X 10.8 and newer
other Unixes: cgo, GTK+ 3.10 and newer
Debian, Ubuntu, etc.: sudo apt-get install libgtk-3-dev
Red Hat/Fedora, etc.: sudo dnf install gtk3-devel
It also requires Go 1.8 or newer.
基于HTML的GUI
wails
https://wails.app/gettingstarted/installing/
https://github.com/wailsapp/wails
Wails 是一个可让您使用 Go 和 Web 技术编写桌面应用的项目。将它看作为 Go 的快并且轻量的 Electron 替代品。 您可以使用 Go 的灵活性和强大功能,结合丰富的现代前端,轻松的构建应用程序。
webview
https://github.com/webview/webview
A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Nim bindings, Haskell, C# bindings and Java bindings available.The goal of the project is to create a common HTML5 UI abstraction layer for the most widely used platforms.It supports two-way JavaScript bindings (to call JavaScript from C/C++/Go and to call C/C++/Go from JavaScript).It uses Cocoa/WebKit on macOS, gtk-webkit2 on Linux and Edge on Windows 10.
go-astilectron
https://github.com/asticode/go-astilectron
Thanks to go-astilectron build cross platform GUI apps with GO and HTML/JS/CSS. It is the official GO bindings of astilectron and is powered by Electron.
go-sciter
https://github.com/sciter-sdk/go-sciter
Check this page for other language bindings (Delphi / D / Go / .NET / Python / Rust).
gowd
https://github.com/dtylman/gowd
Build cross platform GUI apps with GO and HTML/JS/CSS (powered by nwjs)
3D图形API
d3d9
https://github.com/gonutz/d3d9
This library is a pure Go wrapper for Microsoft's Direct3D9 API.
gl
https://github.com/go-gl/gl
This repository holds Go bindings to various OpenGL versions. They are auto-generated using Glow.
Features:
Go functions that mirror the C specification using Go types.
Support for multiple OpenGL APIs (GL/GLES/EGL/WGL/GLX/EGL), versions, and profiles.
Support for extensions (including debug callbacks).
vulkan
https://github.com/vulkan-go/vulkan
Package vulkan provides Go bindings for Vulkan — a low-overhead, cross-platform 3D graphics and compute API. Updated October 13, 2018 — Vulkan 1.1.88.Vulkan API is the result of 18 months in an intense collaboration between leading hardware, game engine and platform vendors, built on significant contributions from multiple Khronos members. Vulkan is designed for portability across multiple platforms with desktop and mobile GPU architectures.
2D矢量图形
gg
https://github.com/fogleman/gg
gg is a library for rendering 2D graphics in pure Go.