Skip to content
Santekno.com | Tech Tutorials and Trends
EN
📖 0%
05 Jul 2025 · 5 min read ·Article 5 / 125
Go

5 Tools & Environment Preparations for GraphQL Development with Go

IH
Ihsan Arif
Writer at Santekno · Backend Engineer

5 Tools & Environment Preparations for GraphQL Development with Go

Slowly but surely, GraphQL is becoming the backbone of modern APIs across many engineering teams in various industries. Its strengths in flexible data querying, self-explanatory documentation, and bandwidth efficiency have led many backend engineers and startups to start moving away from RESTful APIs. However, building a GraphQL system (especially with Go) is not just about the code. It requires the right set of tools, an integrated environment, and a scalable code structure.

In this article, I want to share 5 crucial preparations for designing the tools and environment for GraphQL development based on Go (Golang). This article is not just about “which framework should I use?” — it’s about building a stable and developer friendly development foundation. Some of the topics covered include:

  • GraphQL library and tool options in the Go ecosystem
  • Project setup simulation (with code examples)
  • Database integration and schema migration
  • Testing pipeline
  • Auto-documentation and query simulation

Let’s dive right in and go through them one by one.


1. Choosing a GraphQL Framework/Library in Go

Go is known for its philosophy of “minimalism, less magic,” so the popular frameworks tend to be the ones that are predictable and performant. For GraphQL, there are two widely used options:

LibraryKey FeaturesStrengthsWeaknesses
graphql-goSchema-First, TypedVery similar to Apollo Server, easy integration, efficient runtimeLess intuitive for complex resolvers, a bit verbose
gqlgenCodegen, Typed, ModularGenerates models from the schema, familiar workflow for large teamsInitial setup can be confusing for newcomers

Recommendation: For productive Go projects, use gqlgen because it generates strongly typed Go code, is easy to maintain, and is well suited for companies/startups that want their API to be robust from the start.


2. Folder Structure & Development Setup

To stay scalable, start with a clean architecture that is easy to understand. Here is an example layout for a Go-based GraphQL project using gqlgen:

bash
 1your-graphql-golang/
 2 3├── graph/              # resolver & business logic
 4│   ├── model/          # data types (struct)
 5│   ├── resolver.go
 6│   └── schema.graphqls # GraphQL schema
 7 8├── database/
 9│   └── migration.sql   # DB schema & migration
1011├── go.mod / go.sum
12├── gqlgen.yml          # gqlgen configuration
13├── main.go
14└── README.md

A simple response flow diagram can be illustrated as follows:

MERMAID
graph LR
  C[Client] -->|GraphQL Query| API[Go GraphQL Server]
  API -->|Call| Resolver[GraphQL Resolver]
  Resolver -->|Query| DB[(Database)]
  DB -->|Data| Resolver
  Resolver -->|Return| API
  API -->|Response| C

Every query from the client follows this sequence: Client ⟶ GraphQL server ⟶ Resolver ⟶ Database ⟶ Resolver ⟶ Client.


Setup steps:

  • Install Dependency:
    bash
    1go mod init your-graphql-golang
    2go get github.com/99designs/gqlgen
    3go run github.com/99designs/gqlgen init
  • This will create the graph/ structure and skeleton files that are ready to be developed.

3. Database Integration & Migration

Once the GraphQL schema is ready, make sure the Go backend can already talk to the database (MySQL, PostgreSQL, SQLite, etc.). Use a popular Go ORM such as gorm or ent .

For example, let’s simulate integration with PostgreSQL using gorm:

go
 1import (
 2    "gorm.io/driver/postgres"
 3    "gorm.io/gorm"
 4)
 5
 6func InitDB() *gorm.DB {
 7    dsn := "host=localhost user=postgres password=secret dbname=graphql_db port=5432 sslmode=disable"
 8    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
 9    if err != nil {
10        panic("failed to connect database")
11    }
12    return db
13}
Integrate this database module into your resolver or service logic.

In addition, for schema migration, use tools like golang-migrate so that every deploy can manage the database schema version automatically and safely:

bash
1# Example migration with migrate
2migrate -database "postgres://user:pass@localhost:5432/dbname?sslmode=disable" -path ./database up

4. Testing Pipeline (Unit, Integration, Playground)

Testing is very important for GraphQL, especially because the fields requested can differ on every query. I recommend building 3 types of tests:

  • Unit Test for Functions/Resolvers
  • Integration Test for Queries (end-to-end fetch)
  • Query Simulation (Playground/GraphQL Inspector)

Example Resolver Unit Test (using testing):

go
 1func TestUserResolver(t *testing.T) {
 2    ctx := context.TODO()
 3    // Mock DB or Service Layer...
 4    resp, err := resolver.Query().User(ctx, userID)
 5    if err != nil {
 6        t.Errorf("Expected no error, got %v", err)
 7    }
 8    if resp.ID != userID {
 9        t.Errorf("Expected ID %v, got %v", userID, resp.ID)
10    }
11}

Query Integration Test (use the /integration_test/ subpackage)

  • Simulate the query over HTTP via net/http
  • Validate the HTTP response and JSON body

Playground:
Most frameworks (including gqlgen) automatically provide a GraphQL playground dashboard. In a production application, it can be enabled in development only.


5. Auto-documentation & Query Simulation

One of GraphQL’s strengths is that its schema is self-documenting. You can generate documentation from the .graphqls schema or via tools:

  • GraphQL Playground: The Go Playground is usually accessible at /playground, automatically syncing schema & type docs.
  • Insomnia/Altair: Can be used to simulate queries, test mutations, and generate collections.
  • Graphdoc: For generating HTML Docs from the schema.

Example query in the playground:

graphql
1query {
2  users {
3    id
4    name
5    createdAt
6  }
7}

You will automatically get the output:

json
1{
2  "data": {
3    "users": [
4      { "id": "1", "name": "Vivi", "createdAt": "2024-06-02T10:00Z" }
5    ]
6  }
7}


Conclusion

GraphQL development in Go is very powerful when the environment is built neatly. Here is a summary of the tools & preparation that I recommend:

  1. Use gqlgen as the foundational framework.
  2. A modular project structure: separate the schema, resolver, model, and database adapter.
  3. Integrate an ORM and migration tooling (e.g. gorm + golang-migrate) from the very beginning.
  4. Automate the testing pipeline from unit and integration tests all the way to playground simulation.
  5. A self-documenting API with a playground dashboard and schema generator.

With the toolset and workflow above, you will be ready to build a scalable & production-ready GraphQL API in the Go ecosystem.

Feedback? Other tips? Feel free to share your experience building GraphQL in Go in the comments! 🚀


References & Resources:

Related Articles

💬 Comments