Go Academy · Aula

Abertura de uma conexão

Conecte-se a um banco de dados

Aula 1 de 413 etapas

Abertura de uma conexão é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

O pacote database/sql

O pacote padrão database/sql do Go oferece uma API genérica e independente do banco de dados. Combine-o com um controlador para seu banco de dados específico, como PostgreSQL ou MySQL.

  • Uma API, vários bancos de dados
  • Conjunto de conexões integrado
  • Consultas parametrizadas seguras

Importando um controlador

O controlador se registra por meio de uma importação em branco. O sublinhado significa que ele é importado somente pelo efeito colateral de registro, e não para ser chamado diretamente.

import (
    "database/sql"
    _ "github.com/lib/pq"
)

sql.Open

sql.Open recebe um nome de controlador e um nome de fonte de dados (DSN). Ele ainda não estabelece uma conexão; apenas prepara o conjunto de conexões.

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil {
    log.Fatal(err)
}

db é um conjunto de conexões

O *sql.DB retornado não é uma única conexão; é um conjunto de conexões seguro para uso concorrente por muitas gorrotinas. Abra-o uma vez e compartilhe-o em todo o aplicativo.

Verifique com Ping

Como Open é executado sob demanda, use Ping para realmente estabelecer uma conexão e confirmar que o banco de dados está acessível e que as credenciais são válidas.

if err := db.Ping(); err != nil {
    log.Fatal("cannot reach db:", err)
}

Fechando o conjunto de conexões

Adie db.Close() na sua função main ou de configuração. Raramente você fecha uma conexão por consulta; faça isso somente quando o aplicativo inteiro for encerrado.

defer db.Close()

Ajustando o conjunto de conexões

Controle o conjunto com SetMaxOpenConns, SetMaxIdleConns e SetConnMaxLifetime. Essas opções evitam esgotar o banco de dados e reciclam conexões obsoletas.

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(5 * time.Minute)

Um exemplo executável em memória

Controladores reais precisam de um banco de dados na rede, portanto este exemplo executável mostra o mesmo ciclo de vida com uma abertura e um ping simulados, usando somente tipos da biblioteca padrão.

package main

import (
    "errors"
    "fmt"
)

type DB struct{ dsn string }

func Open(driver, dsn string) (*DB, error) {
    if dsn == "" {
        return nil, errors.New("empty dsn")
    }
    return &DB{dsn: dsn}, nil
}

func (db *DB) Ping() error { return nil }
func (db *DB) Close() error { return nil }

func main() {
    db, err := Open("postgres", "postgres://localhost/mydb")
    if err != nil {
        fmt.Println("open error:", err)
        return
    }
    defer db.Close()
    if err := db.Ping(); err != nil {
        fmt.Println("ping error:", err)
        return
    }
    fmt.Println("connected to", db.dsn)
}

Variantes com suporte a contexto

Prefira PingContext, QueryContext e ExecContext para que as chamadas respeitem prazos e cancelamentos. Passar um contexto limita por quanto tempo uma chamada ao banco de dados travada pode bloquear.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err := db.PingContext(ctx)

O formato DSN

Cada controlador define seu próprio DSN. PostgreSQL aceita uma URL; MySQL usa user:pass@tcp(host:3306)/dbname. Sempre consulte a documentação dos controladores e evite codificar credenciais diretamente.

Um conjunto de conexões, de longa duração

Um erro comum é chamar sql.Open a cada solicitação. Isso elimina o benefício do conjunto de conexões e esgota as conexões disponíveis. Abra uma vez na inicialização, armazene o *sql.DB e reutilize-o em todo lugar.

Verificação rápida

Teste seus conhecimentos sobre conexões.

Recapitulação

Você aprendeu a abrir uma conexão:

  • Importe um controlador em branco e chame sql.Open com o controlador e o DSN
  • *sql.DB é um conjunto seguro para uso concorrente, aberto uma vez
  • Ping verifica a conectividade real
  • Ajuste o conjunto e use métodos que aceitam contexto
  • defer db.Close() no encerramento
Grátis para começar

Aprenda Go com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Abertura de uma conexão” é grátis?

Sim — o texto completo de “Abertura de uma conexão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Abertura de uma conexão”?

Conecte-se a um banco de dados Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Abertura de uma conexão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Abertura de uma conexão
  2. Consulta de linhas
  3. Instruções preparadas
  4. Transações
← Voltar para Go Academy