gqlgen

gqlgen

graphql servers the easy way

访问网站
我的收藏194 次访问更新于 a month ago反馈
gqlgen screenshot

详细介绍

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 的基本步骤如下:

  1. 初始化新模块:
    bash 复制代码
    mkdir example
    cd example
    go mod init example
  2. 添加依赖:
    bash 复制代码
    go get -tool github.com/99designs/gqlgen
  3. 初始化配置并生成模型:
    bash 复制代码
    go tool gqlgen init
  4. 启动服务器:
    bash 复制代码
    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.ymlresolver: true 显式解析;也支持通过 @goField(forceResolver: true) 内联指令配置。字段解析器会在独立 goroutine 中并发执行,并发度可通过 worker_limit 配置。
  • 修改 ID 类型:在配置中将 GraphQL ID 类型重映射为 IntIDIDUintID,首选项作为默认生成类型。
  • 禁用接口 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。
  • 欢迎贡献代码,详情见项目贡献指南。