gqlgen

go generate based graphql server library

Github星跟蹤圖

gqlgen CircleCI Read the Docs

What is gqlgen?

gqlgen is a Go library for building GraphQL servers without any fuss. gqlgen is:

  • Schema first — Define your API using the GraphQL Schema Definition Language.
  • Type safe — You should never see map[string]interface{} here.
  • Codegen — Let us generate the boring bits, so you can build your app quickly.

Feature Comparison

Getting Started

First work your way through the Getting Started tutorial.

If you can't find what your looking for, look at our examples for example usage of gqlgen.

Reporting Issues

If you think you've found a bug, or something isn't behaving the way you think it should, please raise an issue on GitHub.

Contributing

Read our Contribution Guidelines for information on how you can help out gqlgen.

Frequently asked questions

How do I prevent fetching child objects that might not be used?

When you have nested or recursive schema like this:

type User {
  id: ID!
  name: String!
  friends: [User!]!
}

You need to tell gqlgen that we should only fetch friends if the user requested it. There are two ways to do this.

Custom Models

Write a custom model that omits the Friends model:

type User struct {
  ID int
  Name string
}

And reference the model in gqlgen.yml:

# gqlgen.yml
models:
  User:
    model: github.com/you/pkg/model.User # go import path to the User struct above

Explicit Resolvers

If you want to Keep using the generated model: mark the field as requiring a resolver explicitly in gqlgen.yml:

# gqlgen.yml
models:
  User:
    fields:
      friends:
        resolver: true # force a resolver to be generated

After doing either of the above and running generate we will need to provide a resolver for friends:

func (r *userResolver) Friends(ctx context.Context, obj *User) ([]*User, error) {
  // select * from user where friendid = obj.ID
  return friends,  nil
}

IDs are strings but I like ints, why cant I have ints?

You can by remapping it in config:

models:
  ID: # The GraphQL type ID is backed by
    model:
      - github.com/99designs/gqlgen/graphql.IntID # An go integer
      - github.com/99designs/gqlgen/graphql.ID # or a go string

This means gqlgen will be able to automatically bind to strings or ints for models you have written yourself, but the
first model in this list is used as the default type and it will always be used when:

  • Generating models based on schema
  • As arguments in resolvers

There isnt any way around this, gqlgen has no way to know what you want in a given context.

Other Resources

主要指標

概覽
名稱與所有者99designs/gqlgen
主編程語言Go
編程語言Go (語言數: 7)
平台
許可證MIT License
所有者活动
創建於2018-02-11 04:54:11
推送於2025-04-21 12:17:23
最后一次提交2025-04-21 08:17:21
發布數114
最新版本名稱v0.17.72 (發布於 )
第一版名稱0.2.0 (發布於 )
用户参与
星數10.3k
關注者數126
派生數1.2k
提交數3.2k
已啟用問題?
問題數1647
打開的問題數337
拉請求數1369
打開的拉請求數29
關閉的拉請求數227
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?