Abertura de uma conexão
Conecte-se a um banco de dados
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
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
- Abertura de uma conexão
- Consulta de linhas
- Instruções preparadas
- Transações