在现代 Web 开发中,实时通信需求日益增长,WebSocket 成为构建实时应用的核心技术。然而,Go 语言原生的 WebSocket 开发方式往往繁琐且容易出错。为了解决这一痛点,我们推出了 fun 框架——一个专为 Go 语言设计的现代化 WebSocket 框架,让实时应用开发变得简单、高效且优雅。
什么是 fun 框架?
fun 是一个基于 Gorilla WebSocket 构建的 Go 语言框架,它提供了服务绑定、依赖注入、参数验证、日志记录等丰富功能。fun 框架专注于简化 WebSocket 应用开发,通过自动生成 TypeScript 客户端代码,实现前后端开发的无缝协作。
fun 框架的核心优势
1. 极简的开发体验
通过结构化的服务定义和方法绑定,fun 让开发者能够以最自然的方式编写业务逻辑,无需关心底层 WebSocket 的复杂细节。
// 定义服务结构体
type HelloService struct {
fun.Ctx // 必须嵌入 Ctx
}
// 定义 DTO
type HelloDto struct {
Name string
}
// 定义方法
func (s *HelloService) Hello(dto HelloDto) string {
return "Hello, " + dto.Name
}
func main() {
// 绑定服务
fun.BindService(HelloService{})
// 启动服务
fun.Start(3000)
}
2. 强大的依赖注入系统
fun 内置自动依赖注入功能,通过简单的标签即可实现服务间的依赖管理,大大降低了代码耦合度。
type UserService struct {
fun.Ctx
Repo *Repository `fun:"auto"` // 自动注入
}
3. 完善的参数验证机制
集成 validator.v10,支持丰富的验证规则,确保数据的安全性和有效性。
type UserDto struct {
Name string `validate:"required"`
Email string `validate:"required,email"`
Age int `validate:"min=0,max=150"`
}
4. 自动生成 TypeScript 客户端
fun 框架能够自动生成类型安全的 TypeScript 客户端代码,实现前后端类型一致性,提升开发效率。
import fun from "./gen/ts/fun";
// 创建客户端实例
const client = fun.create("ws://localhost:3000");
// 调用服务方法
const result = await client.helloService.hello({ name: "World" });
console.log(result); // "Hello, World"
5. 灵活的守卫机制
类似中间件的守卫机制,可用于实现鉴权、日志记录等横切关注点。
type AuthGuard struct {
// 依赖...
}
func (g *AuthGuard) Guard(ctx fun.Ctx) {
// 鉴权逻辑
// 失败时可以 panic 错误
}
// 绑定全局守卫
fun.BindGuard(AuthGuard{})
6. 支持长连接和主动推送
通过代理模式,服务端可以主动向客户端推送数据,满足实时通信场景的需求。
func (s *UserService) Subscribe(dto SubscribeDto, close fun.ProxyClose) *chan string {
ch := make(chan string)
// 处理关闭回调
close(func() {
close(ch)
})
go func() {
for {
select {
case msg := <-ch:
s.Push(s.Id, s.RequestId, msg) // 推送数据
}
}
}()
return &ch
}
为什么选择 fun 框架?
- 高效开发:通过自动生成代码和结构化设计,显著提升开发效率
- 类型安全:Go 和 TypeScript 的强类型系统确保运行时安全
- 易于维护:清晰的架构和自动化的代码生成降低维护成本
- 生态完善:基于成熟的技术栈,拥有丰富的社区支持
- 零学习成本:对于熟悉 Go 语言的开发者来说,几乎无需额外学习
快速开始
只需几个简单步骤,即可开始使用 fun 框架:
# 安装
go get github.com/fun-go/fun
# 创建 main.go
# (参考上面的示例代码)
# 运行服务
go run main.go
# 生成客户端代码
fun.Gen()
结语
fun 框架致力于让 Go 语言的 WebSocket 开发变得更加简单和高效。无论你是构建实时聊天应用、在线游戏还是实时数据监控系统,fun 都能为你提供强大的支持。立即体验 fun 框架,开启你的现代化 WebSocket 开发之旅!