oto 项目介绍
oto 是一个基于 Go 语言开发的 RPC 代码生成工具,旨在帮助开发者快速生成服务端和客户端代码。其核心目标是通过描述 Go 接口来定义服务,并基于这些接口自动生成生产级别的模板代码,满足当下开发需求。
项目特点
- 100% Go:oto 项目完全使用 Go 语言编写,确保与 Go 项目无缝集成。
- 服务定义:通过 Go 接口描述服务,包括结构体、方法以及注释。
- 代码生成:工具能够生成服务端和客户端代码,支持快速开发和部署。
- 模板可定制:提供现成的生产级模板,同时也可以供用户复制并根据需求修改。
谁在使用 Oto?
以下是一些采用 oto 项目的公司和项目:
- Grafana Labs 的 IRM 工具
- Pace.dev
- Firesearch.dev
模板使用
oto 项目中的模板已经在生产环境中使用,包括官方提供的 Oto 模板以及基于开源 CLI 模板生成的 Pace CLI 工具。
如何学习使用 oto
oto 项目不仅提供了视频介绍,还通过博客展示了如何利用代码生成技术构建 API 和 CLI。
视频
- Mat Ryer 在 Belfast Gophers Meetup 的 oto 介绍
博客
- 文章标题:《How code generation wrote our API and CLI》
实用教程
如何安装和使用 oto 生成服务代码的步骤如下:
-
安装项目:
go install github.com/pacedotdev/oto@latest
-
定义服务:编写 Go 接口来定义服务。
type GreeterService interface { Greet(GreetRequest) GreetResponse }
-
下载模板:从 oto 项目中获取服务器和客户端的模板。
mkdir templates wget [模板网址] -q -O ./templates/server.go.plush
-
生成代码:使用 oto 工具生成服务端和客户端代码。
oto -template ./templates/server.go.plush -out ./generated/oto.gen.go -pkg generated ./definitions
-
服务实现:在 Go 中实现服务逻辑。
func (GreeterService) Greet(ctx context.Context, r GreetRequest) (*GreetResponse, error) { resp := &GreetResponse{ Greeting: "Hello " + r.Name, } return resp, nil }
-
使用生成的代码:写一个
main.go
来启动服务器。func main() { g := GreeterService{} server := otohttp.NewServer() generated.RegisterGreeterService(server, g) http.Handle(server.Basepath, server) log.Fatal(http.ListenAndServe(":8080", nil)) }
-
客户端调用:使用生成的 JavaScript 客户端代码访问服务。
greeterService.greet({ name: "Mat" }).then((response) => alert(response.greeting))
其他功能
- JSON 标签控制:可通过
json
标签控制字段在前端代码中的名称。 - 附加数据:使用
-params
标志将字符串传递给模板。 - 注释元数据:在服务、方法、对象和字段的注释中可以包括附加的元数据。
- Open API 支持:提供命令帮助项目进行 Open API 规范开发。
项目贡献者
特别感谢项目的一些贡献者:
- @mgutz:结构体标签支持
- @sethcenterbar:注释元数据支持
oto 项目是 PACE. 项目的一部分,致力于为开发者提供高效和便捷的工具。