你是否曾经梦想过后端接口调用能像本地函数调用一样简单?
几个月前,我厌倦了繁琐的API对接工作。每次添加新功能,都要定义路由、编写控制器、处理请求参数、定义响应格式...更痛苦的是,前端同事总是因为接口文档更新不及时而出错。
我想要的是:写一个Go方法,前端就能直接调用,就像调用本地函数一样自然。
于是,Fun诞生了!
看看这个神奇的例子:
go
// 后端:定义一个用户服务
type UserService struct {
fun.Ctx // 嵌入上下文获取请求信息
}
type GetUserDto struct {
UserId int64
}
// 写一个方法,它就自动变成可调用的接口
func (s *UserService) GetUser(dto GetUserDto) *User {
return &User{
Id: dto.UserId,
Name: "张三",
Age: 25,
}
}
type CreateUserDto struct {
Name string
Age int `validate:"min=0,max=150"`
}
func (s *UserService) CreateUser(dto CreateUserDto) *User {
// 处理创建用户逻辑
return &User{
Id: generateUserId(),
Name: dto.Name,
Age: dto.Age,
}
}
func main() {
fun.BindService(UserService{})
fun.Start(3000) // 服务启动!
}
前端的魔法时刻来了:
typescript
// 前端:调用后端方法就像调用本地函数
import fun from './service/fun';
const client = fun.create("ws://localhost:3000");
// 这看起来像本地函数调用,但实际调用了后端
const user = await client.userService.getUser({ userId: 123 });
console.log(user); // { id: 123, name: "张三", age: 25 }
// 创建用户也一样简单
const newUser = await client.userService.createUser({
name: "李四",
age: 30
});
console.log(newUser); // { id: 456, name: "李四", age: 30 }
// 完整的类型提示和自动补全!
再也不用手写axios请求、定义接口类型、处理各种异常情况。写好方法,调用方法,就这么简单!
Fun Framework还内置了企业级特性:
- 🔄 自动依赖注入 - 告别手动初始化
- 🛡️ 参数验证 - 自动校验输入参数
- 📝 结构化日志 - 快速定位问题
- ⚡ 类型安全 - 编译时捕获错误
- 🎯 自动生成客户端 - 前后端无缝协作
看看 - 一个现代化的协作平台,展示了这个框架的强大能力。
从"Hello World"到复杂的企业应用,Fun Framework让后端开发变得前所未有的简单。忘掉复杂的REST API设计,忘掉繁琐的接口对接,专注于真正有价值的业务逻辑。
如果你也想体验这种革命性的开发方式,不妨试试Fun Framework,让你的代码像诗一样优雅。
官网:fungo.ink
基于fun构建的网站 cyi.cc