本文介绍了使用 golang 和 gqlgen 构建 graphql 服务的完整流程。1. 初始化项目环境:创建 go 项目并安装 gqlgen;2. 定义 graphql schema:编写 todo 类型及 query、mutation 操作;3. 生成代码结构:运行 gqlgen generate 命令生成模型和解析器框架;4. 实现 resolver 逻辑:添加内存存储并完成查询与创建功能;5. 启动 http 服务:配置处理器和 graphiql 界面,运行服务进行测试。整个过程覆盖从定义接口到服务部署的核心步骤,适合初学者快速上手。

GraphQL 是现代 API 开发中非常流行的一种查询语言,它允许客户端更精确地请求所需数据。Golang 以其高性能和简洁语法成为构建后端服务的理想选择。结合 gqlgen 这个专为 Go 设计的 GraphQL 框架,我们可以快速搭建一个类型安全、结构清晰的 GraphQL 服务。

本文将手把手带你使用 Golang + gqlgen 实现一个完整的 GraphQL 服务,包括定义 schema、生成代码、编写 resolver 和启动服务等步骤。

初始化项目环境
在开始之前,确保你已经安装了 Go 环境(建议 1.18+)以及必要的依赖管理工具。
立即学习“go语言免费学习笔记(深入)”;
首先创建一个新的 Go 项目:

mkdir graphql-democd graphql-demogo mod init github.com/yourname/graphql-demo
接下来安装 gqlgen:
go install github.com/99designs/gqlgen@latest
如果你使用的是 Go 1.16 及以上版本,可以直接通过 go run 来运行 gqlgen 命令,不需要全局安装。
定义 GraphQL Schema
gqlgen 支持从 .graphql 文件生成 Go 代码,所以我们先来写一个简单的 schema。创建文件 graph/schema.graphqls,内容如下:
type Todo { id: ID! text: String! done: Boolean!}type Query { todos: [Todo!]!}type Mutation { createTodo(text: String!): Todo!}
这个 schema 表示我们有一个 Todo 类型,支持查询所有待办事项和新增一条待办事项的功能。
接着执行命令生成基础代码:
go run github.com/99designs/gqlgen generate
这会生成几个关键目录和文件,包括 graph/model(模型)、graph/resolver.go(解析器入口)以及根据 schema 生成的接口代码。
编写 Resolver 实现逻辑
现在需要实现具体的业务逻辑。打开 graph/resolver.go,你会看到一些未实现的方法提示。
我们先添加一个内存中的 todo 列表作为临时存储:
type server struct { todos []model.Todo}
然后实现 Query 和 Mutation 中的方法:
查询所有待办事项
在 resolver.go 中找到 Todos 方法:
func (s *server) Todos(ctx context.Context) ([]*model.Todo, error) { var res []*model.Todo for i := range s.todos { res = append(res, &s.todos[i]) } return res, nil}
创建新的待办事项
实现 CreateTodo 方法:
func (s *server) CreateTodo(ctx context.Context, text string) (*model.Todo, error) { t := model.Todo{ ID: fmt.Sprintf("%d", len(s.todos)+1), Text: text, Done: false, } s.todos = append(s.todos, t) return &t, nil}
别忘了导入 fmt 包。
启动 GraphQL 服务
最后一步是配置并启动 HTTP 服务。编辑 server.go 文件,修改其中的 main 函数:
func main() { srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.server{}})) http.Handle("/", playground.Handler("GraphQL playground", "/query")) http.Handle("/query", srv) log.Printf("connect to http://localhost:8080/ for GraphQL playground") log.Fatal(http.ListenAndServe(":8080", nil))}
这段代码做了几件事:
创建了一个默认的 GraphQL 处理器配置了 GraphiQL 浏览器界面用于调试监听 8080 端口
运行服务:
go run server.go
访问 http://localhost:8080 即可打开图形化界面进行测试。
例如执行以下 mutation 插入数据:
mutation { createTodo(text: "Learn gqlgen") { id text done }}
再执行 query 获取列表:
query { todos { id text done }}
小结
到这里,一个基于 Golang 和 gqlgen 的完整 GraphQL 服务就搭建完成了。虽然我们用的是内存存储,但整个流程涵盖了从 schema 定义到服务启动的全过程。
你可以在此基础上扩展数据库连接、身份验证、分页查询等功能。
基本上就这些,不复杂但容易忽略细节的地方在于 resolver 的绑定方式和 schema 的结构是否匹配,稍有不慎就会导致运行时报错。遇到问题时记得查看生成的代码和接口定义是否一致。
以上就是如何用Golang实现GraphQL服务 集成gqlgen框架完整教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1396016.html
微信扫一扫
支付宝扫一扫