Gooey 项目介绍Gooey 是一个基于 Go 语言的 Web 开发框架,发音为 /'ɡu.i/ 或简称“GUI”,核心定位是打通 Go 语言、WebAssembly(WebASM)与浏览器 API 的衔接,同时提供 Web UI 组件体系,适用于开发可在本地 Web View 中运行的 Web 应用。
核心定位与两大模块Gooey 主要分为两个核心部分,覆盖从底层绑定到上层组件的全链路开发需求:
1. 纯 Go WebASM 绑定框架:解决 Go 语言与 WebASM、浏览器 API 的交互问题,消除跨技术栈的通信壁垒。
2. 纯 Go Web UI 组件框架:提供结构化的 Web 应用组件体系,可直接用于构建本地 Web View 中的应用界面。
开发动机:解决现代 Web 开发痛点
该项目旨在针对性解决传统 Web 开发中的核心问题,具体包括:
• Web Components 虽实现功能分离,但存在“aria-属性疲劳”,影响网页可访问性。
• 前后端通信逻辑复杂,易出现兼容性问题。
• 前后端 schema 安全与验证需用不同语言(如 JS/TS 与 Go)重复实现,难以保持一致性。
• 依赖网络的 Web 应用在弱网环境下体验差。
基于上述问题,Gooey 提出解决方案:• 利用 WebASM 让前端直接复用 Go 的类型、结构体与 schema,避免重复开发。
• 通过 WebASM 实现动态 Web Components(前端),结合 Go 原生构建实现静态 Web Components(后端服务端渲染)。
• 基于 webview/webview 开发“离线优先”应用,搭配 go:embed 将所有资源(/public 目录)打包进应用二进制文件,摆脱网络依赖。
架构设计:响应式 MVC 与单向数据流
Gooey 采用响应式 MVC 架构,并遵循单向数据流模式(状态管理的循环模式),核心优势在于:
• 便于将 schema 序列化/反序列化为视图(View),降低数据与界面的耦合。
• 所有自定义业务代码集中在“控制器(Controller)”中,每个控制器独立管理自身的视图(View)、客户端(Client)与存储(Storage)。
• 支持灵活集成自定义控制器与视图:视图层仅作为 Web Components 层,多数场景下无需修改即可适配业务逻辑。
关键资源与使用指南1. 文档体系
项目提供完善的文档,帮助开发者快速上手与深入理解:
• ERRATA.md:记录 Go 语言在 WebASM 环境中使用的已知问题与特殊注意事项(即使有 Go 开发经验也建议阅读,避免浏览器环境下的“坑”)。
• ARCHITECTURE.md:详解 Gooey 应用的架构设计。
• BINDINGS.md:说明已实现的 Web API 绑定列表。
• COMPONENTS.md:说明已实现的 Web UI 组件列表。
• TODO.md:记录待开发的功能与计划。
• CHANGELOG.md:记录版本更新中的变更、新增与移除内容。
2. 示例代码(Examples)
examples 目录提供最小化测试用例,覆盖绑定与组件两大场景,每个示例包含:
• main.go:编译为 WebASM 二进制文件(main.wasm)。
• serve.go:本地 Web 服务器逻辑。
• 执行 build.sh 后,示例可在 http://localhost:3000 访问,同时兼具“单元测试”功能(因目前 go test 暂不支持 syscall/js 平台的二进制生成)。
具体示例分类:
• 绑定示例:canvas2d、console、crypto-aescbc、cookiestore、dom、encoding、fetch 等(覆盖常用浏览器 API 交互)。
• 组件示例:app、content-table(内容表格)、content-linechart(折线图)、layout(布局)、ui(基础 UI 组件)等。
3. 版本与许可
• 最新版本:v0.0.5(2025 年 10 月 10 日发布),共 2 个正式版本。
• 开源许可:采用 MIT 协议,允许自由使用、修改与二次分发。
核心贡献者
• cookiengineer(主要维护者)
• utsavanand2
适用场景适合需要用 Go 语言统一前后端技术栈、追求“离线优先”体验、需降低前后端协作复杂度的 Web 开发场景,尤其适合开发本地 Web View 应用(如桌面端轻应用)。