如何配置gqlgen.yml为多个GraphQL实体生成独立的解析器文件
如何配置gqlgen.yml为多个GraphQL实体生成独立的解析器文件
嘿,我来帮你搞定这个需求!要让gqlgen给User、Todo这类不同实体各自生成独立的解析器文件,核心就是在gqlgen.yml里配置好解析器的文件名模板和目录结构,一步步来:
首先,先确认你的GraphQL Schema文件已经清晰定义了每个实体对应的Query和Mutation字段,比如:
graphql-gateway/schema/query.graphqlstype Query {
getUser(id: ID!): User
getTodo(id: ID!): Todo
}graphql-gateway/schema/mutation.graphqlstype Mutation {
createUser(input: CreateUserInput!): User
createTodo(input: CreateTodoInput!): Todo
}
接下来是gqlgen.yml的核心配置,这部分是关键:
# 加载所有schema文件,用通配符更灵活,不用逐个列举 schema: - graphql-gateway/schema/**/*.graphqls # 解析器生成规则配置 resolvers: # 解析器文件的根目录 dir: resolvers # 动态生成文件名的模板,完美匹配你想要的结构 filename_template: "{{ .Type | lower }}_{{ .ResolverType | lower }}.resolvers.go" # 要是你想给每个实体单独建子目录(比如resolvers/user/、resolvers/todo/),就换成这个模板: # filename_template: "{{ .Type | lower }}/{{ .Type | lower }}_{{ .ResolverType | lower }}.resolvers.go" # 关联对应的Go模型(根据你的实际模型路径调整) models: User: model: ./models.User Todo: model: ./models.Todo
我给你拆解下配置里的关键项:
schema用**/*.graphqls可以自动匹配schema目录下所有子文件,比手动列每个文件省心多了。resolvers.filename_template是实现独立文件的核心:- 模板里的
{{ .Type }}会自动识别实体类型(User/Todo),{{ .ResolverType }}会识别是Query还是Mutation。 - 用第一个模板的话,生成的文件就是
resolvers/user_query.resolvers.go、resolvers/user_mutation.resolvers.go、resolvers/todo_query.resolvers.go、resolvers/todo_mutation.resolvers.go,完全符合你的要求。 - 要是你想让目录结构更规整,每个实体的解析器都放在单独子目录里,就用第二个带目录的模板,生成后就是
resolvers/user/user_query.resolvers.go这种结构。
- 模板里的
最后再提两个小提醒:
- 生成解析器前,建议备份或者删除旧的解析器文件,避免新旧文件冲突。
- 运行
go run github.com/99designs/gqlgen generate命令,就能自动生成对应的独立解析器文件啦!
备注:内容来源于stack exchange,提问作者Godfrey Owidi
相关产品推荐
相关产品推荐

