Biblioteca GraphQL para Go (Golang) — guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca GraphQL Go (Golang) — ferramenta poderosa para criar APIs



GraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitar apenas os dados de que realmente precisam. No ecossistema Go (Golang), uma das bibliotecas mais populares para trabalhar com GraphQL é o gqlgen (GraphQL Go Generate). Esta biblioteca permite criar servidores GraphQL type-safe com o mínimo de código boilerplate. Neste artigo, vamos detalhar o gqlgen, sua instalação, configuração e exemplos de uso.



O que é gqlgen?



gqlgen é um gerador de código para Go que cria automaticamente resolvers e tipos com base no seu esquema GraphQL. Principais vantagens:



  • Type-safe — todos os tipos são verificados em tempo de compilação
  • Mínimo de código boilerplate — a biblioteca gera a maior parte do código para você
  • Flexibilidade — suporte a subscrições, mutações e consultas complexas
  • Desempenho — alta velocidade de execução, característica do Go


Instalação do gqlgen



Para começar, instale a biblioteca e a ferramenta de linha de comando:



go get github.com/99designs/gqlgengo run github.com/99designs/gqlgen init


O comando init criará uma estrutura básica de projeto com os arquivos schema.graphqls, gqlgen.yml e código gerado.



Estrutura do projeto



Após a inicialização, você obterá a seguinte estrutura:



my-graphql-app/├── gqlgen.yml          # Configuração do gerador├── graph/│   ├── schema.graphqls # Esquema GraphQL│   ├── resolver.go     # Resolvers (seu código)│   └── models_gen.go   # Modelos gerados (não editar)├── server.go           # Ponto de entrada└── go.mod


Escrevendo o esquema GraphQL



Exemplo de arquivo schema.graphqls para um blog simples:



type Query {  posts: [Post!]!  post(id: ID!): Post}

type Mutation { createPost(input: PostInput!): Post! deletePost(id: ID!): Boolean!}

type Post { id: ID! title: String! content: String! author: String! createdAt: Time!}

input PostInput { title: String! content: String! author: String!}

scalar Time


Geração de código



Após descrever o esquema, execute:



go run github.com/99designs/gqlgen generate


Isso criará os arquivos models_gen.go e generated.go com tipos e interfaces de resolvers.



Implementação dos resolvers



Agora é necessário implementar a lógica em resolver.go:



package graph

import ( "context" "time")

// Modelo de dadostype Post struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"createdAt"`}

// Armazenamento em memóriavar posts = []*Post{ { ID: "1", Title: "Introdução ao GraphQL", Content: "GraphQL é uma linguagem de consulta...", Author: "João Silva", CreatedAt: time.Now(), },}

// Resolver para Query.postsfunc (r *queryResolver) Posts(ctx context.Context) ([]*Post, error) { return posts, nil}

// Resolver para Query.postfunc (r *queryResolver) Post(ctx context.Context, id string) (*Post, error) { for _, post := range posts { if post.ID == id { return post, nil } } return nil, nil}

// Resolver para Mutation.createPostfunc (r *mutationResolver) CreatePost(ctx context.Context, input PostInput) (*Post, error) { newPost := &Post{ ID: fmt.Sprintf("%d", len(posts)+1), Title: input.Title, Content: input.Content, Author: input.Author, CreatedAt: time.Now(), } posts = append(posts, newPost)

Recommendations