gqlgen 简介
gqlgen 是一个用于构建 GraphQL 服务器的 Go 语言库(当前版本 v0.17.94),其目标是让开发者“毫无麻烦”地搭建 GraphQL 服务。
gqlgen 的核心特点包括:
- 基于 Schema First 方法:使用 GraphQL Schema Definition Language 定义 API。
- 强调类型安全:在 gqlgen 中不应出现
map[string]interface{} 这类弱类型。
- 支持代码生成:自动生成繁琐的样板代码,让开发者专注于快速构建应用。
若仍不确定是否采用,可对比 gqlgen 与其他 Go GraphQL 实现。
快速开始
初始化一个新的 Go 模块并运行 gqlgen 的基本步骤如下:
- 初始化新模块:
mkdir example
cd example
go mod init example
- 添加依赖:
go get -tool github.com/99designs/gqlgen
- 初始化配置并生成模型:
go tool gqlgen init
- 启动服务器:
go run server.go
更多入门帮助包括:入门教程、真实示例、API 参考文档。
主要功能
根据文档目录与说明,gqlgen 提供以下相关功能与支持:
- 模型生成(Model Generation):基于 schema 生成 Go 模型。
- 解析器(Resolvers):支持显式解析器,字段可标记
resolver: true 强制生成。
- 数据加载器(Dataloaders):用于优化数据获取。
- **字段收集(Field Collection)与查询复杂度(Query Complexity)**控制。
- 中间件(Middlewares)与错误处理(Handling Errors)。
- 文件上传(File Upload)、内省(Introspection)、APQ(Automatic Persisted Queries)。
- **标量(Scalars)与Schema 指令(Schema Directives)**自定义。
- **订阅(Subscriptions)**及订阅事件上下文。
- **插件(Plugins)系统与名称冲突(Name Collision)**处理。
- **变更集(Changesets)**支持。
适用场景与常见用法
gqlgen 适用于需要使用 Go 构建类型安全、Schema 优先的 GraphQL 服务端应用的场景。
常见问题示例:
- 防止获取可能不使用的子对象:可通过自定义模型省略字段,或使用
gqlgen.yml 中 resolver: true 显式解析;也支持通过 @goField(forceResolver: true) 内联指令配置。字段解析器会在独立 goroutine 中并发执行,并发度可通过 worker_limit 配置。
- 修改 ID 类型:在配置中将 GraphQL
ID 类型重映射为 IntID、ID 或 UintID,首选项作为默认生成类型。
- 禁用接口 Getter:v0.17.14 起接口默认生成 getter,可在
gqlgen.yml 设置 omit_getters: true 关闭。
其他资源
- Christopher Biscardi 在 Gophercon UK 2018 的分享:Introducing gqlgen
- Dive into GraphQL by Iván Corrales Solera
- 基于 gqlgen 与 Postgres 的示例项目(Oleg Shalygin)
- 使用 gqlgen 的 Hackernews GraphQL Server(Shayegan Hooshyari)
贡献与反馈
- 发现问题可在 GitHub 提交 issue。
- 欢迎贡献代码,详情见项目贡献指南。